{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# <center style=\"font-size:140%;\"> Report - Project #*1*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<center>\n",
    "<span style=\"font-size:160%;\">**McGill University, Montreal** </span> <br>\n",
    "MECH(447|652) - Dynamics of Combustion <br>\n",
    "Project #*1*\n",
    "</center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<center>Submitted to \n",
    "<center>**Gilles Bourque**\n",
    "<center>by\n",
    "<center>**Saad Malik (260559335)**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<center>Date (Oct, 3, 2018)\n",
    "<center>Montreal, Quebec, Canada"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Table of Content"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* [Introduction](#Introduction)\n",
    "\n",
    "* [Part 1 - Complete Combustion - CH4 + Air Flames](#Part 1 - Complete Combustion - CH4 + Air Flames) \n",
    "    * [1(a) = Global Reaction of CH4](#1(a)= Global Reaction of CH4)\n",
    "    * [1(b) = LHV & HHV calculation](#1(b)= HHV & LHV calculation)\n",
    "    * [1(c)= Calculating T adiabatic for phi between 0.5-2](1(c) = Calculating T adiabatic for phi between 0.5-2)\n",
    "    * [1(d) = Dependance of T adiabatic on reactants Pressure and Temperature](#1(d) = Dependance of T adiabatic on reactants Pressure and Temperature)\n",
    "    * [1.2 Thermo Properties NASA](1.2 Thermo Properties NASA)\n",
    "    * [Extra question 1](### Extra question 1)\n",
    "* [Part 2 - Chemical Equilibrium - C2H6 + Air Flames](Part 2 - Chemical Equilibrium - C2H6 + Air Flames) \n",
    "    * [2.1 Constant Pressure and Temperature while Equivalence Ratio varies](#2.1 Constant Pressure and Temperature while Equivalence Ratio varies)\n",
    "    * [2.2 Constant Equivalence Ratio and Temperature while Pressure varies](#2.2 Constant Equivalence Ratio and Temperature while Pressure varies)\n",
    "    * [2.3  Constant Equivalence Ratio and Pressure while Temperature varies](#2.3 Constant Equivalence Ratio and Pressure while Temperature varies)\n",
    "\n",
    "* [Part 3 - Exhaust Gas Recirculation](### 3.1 Exhaust Gas Recirculation) \n",
    "    * [Extra question 2](#### Extra question 2)\n",
    "* [Conclusion](#Conclusion)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Thermodynamics combustion deals with equilibirum states and how chemical composition can be calculated for a system of known atomic/molecular composition if two independent thermodynamic properties are known. It involves the study of combustion of chained hydrocarbons, mixed with an oxidizer to produce water and other bi-products. The process of bond breakage and bond formation can either release or require energy depending on whether the reaction is an endothermic or exothermic reaction. The amount of energy required or released by the reaction depends on the following factors:- bond type, bond strength, and the fuel-air ratio of the reaction mixture. \n",
    "\n",
    "The fuel-air mixture composition determines if the reaction is fuel rich or fuel lean. In the fuel rich case, there is an excess of fuel; i.e. more fuel than air. This results in the incomplete combustion of the entire fuel, thus excess fuel is left at the end of the reaction. On the other hand, there is an excess of the oxidizing agent in the fuel lean case; i.e. less fuel than air. This results in complete combustion of the fuel, but an excess of the oxidizing agent which has the tendency to react with the bi-products of the reaction and producing other products. Both cases were analyzed initially to obtain the Adiabatic Flame Temperature, T_ad. Other features were also analyzed such as enthalpy, entropy, equilibrium composition, and Gibbs free energy.\n",
    "\n",
    "In Part 1 of the project, an idealized combustion reaction between Methane and Air was analyzed to obtain the Higher and Lower heating values (HHV and LHV). Further calculations were done to find the adiabatic flame temperature. Part 2 involves analyzing three cases where one of the following properties (pressure, temperature or equivalence ratioed) are changed or the effect of that on the adiabatic flame temperature is observed. The final part is divided into two parts: dilution and enrichment, which studies methods to control flame temperature and to reduce the combustion pollutants, like NOx. The dilution of methane combustion is done by either adding carbon dioxide or nitrogen to the mixture, and the enrichment involves adding hydrogen to the mixture in this assignment.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Part 1 - Complete Combustion - CH4 + Air Flames"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Equivalence ratio is defined as  the ratio between fuel-air ratio of the mixture to the fuel-air ratio of the stoichiometric mixture. Therefore, for fuel-lean condition $  \\phi <1 $\n",
    ",because compared to optimum conditions there is a deficiency of air. At $  \\phi =1 $\n",
    ",because compared to optimum conditions there is excess air. For fuel-rich conditions $  \\phi >1 $ \n",
    ",because the fuel and air reacts completely to produce H2O(steam) and CO2 we have maximum combustion intensity. The advantage of using $  \\phi  $\n",
    "over the generic mass fuel-air ratio or molar fuel-air ratio is that it takes into account stoichiometric conditions, and hence it is independent of both mass and molar values for the fuel and air. For the oxidation of methane , CH4 by air we will consider the air composition to be 21 $  \\%  $ O2 and 79 $  \\%  $ N2. The global reaction for complete stoichiometric combustion reaction of CH4 is given below:\n",
    " \n",
    "$ C_{}H_{4}+2 \\left( O_{2}+3.76N_{2} \\right) ⇌CO_{2}+2H_{2}0+7.52N_{2}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~for~~ \\phi =1 $ "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1(a) = Global Reaction of CH4"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "For a rich mixture ($\\phi > 1$), this becomes:\n",
    " \n",
    "$  \\phi CH_{4}+2 \\left( O_{2}+3.76N_{2} \\right) ⇌aC0_{2}+bCO+cH_{2}+dH_{2}O+7.52N_{2} $\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "The stoichiometric equation for combustion of a lean methane/air mixture ($\\phi < 1$) is:\n",
    " \n",
    "$  \\phi CH_{4}+2 \\left( O_{2}+3.76N_{2} \\right) ⇌ \\phi C0_{2}+2\\phi H_{2}O+2 \\left( 1- \\phi  \\right) O_{2}+7.52N_{2} $\n",
    "\n",
    "\n",
    "\n",
    "Through the use of the relation that is presented to us in the question which is ${X_{CO_2}\\over X_{CO}}$ = 9, the above equations can be easily simplified \n",
    "\n",
    "This simplified version of the quation is shown below: \n",
    "\n",
    "\n",
    "$$\\mathrm{\\phi CH_4 + 2(O_2 + 3.76 N_2) \\rightarrow 0.9\\phi CO_2 + 0.1\\phi CO + (3.9\\phi - 4 )H_2 + (4 - 1.9\\phi)H_2O + 7.52 N_2}$$\n",
    "\n",
    "where, $\\phi$ represents the equivalence ratio."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " ### 1(b) = HHV & LHV calculation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "The combustion of methane is an exothermic reaction; thus heat is released in the process. The amount of heat released is calculated as the difference between enthalpies of reactants and products as a function of their number of moles in the stoichiometric reaction. In this case, there are two values of the heat of combustion, the Higher Heating value (HHV) and the Lower Heating value (LHV). Since water is produced in liquid form rather than in vapor form in LHV, HHV is higher than LHV\n",
    "\n",
    "Also for computing the LHV and HHV we use \n",
    "\n",
    "$ HHV=~\\frac{q_{c}}{m_{fuel}}+h_{fg} $\n",
    "\n",
    "$ LHV=~\\frac{q_{c}}{m_{fuel}} $"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The next step involved finding the adiabatic flame temperature (T_(ad,comp)) of the combustion reaction with varying 𝜙 from 0.5 to 2, with an increment of 0.1. The adiabatic flame temperature is dependent on two types of reactions: constant volume and constant pressure. In both cases, it is so done to account theoretically for the fact that no energy is lost to the surroundings. In this case, the calculated T_(ad,comp) is at constant pressure, thus assuming no heat transfer or changes in kinetic or potential energy.  The calculations were carried out in an iterative process"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import cantera as ct \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "h_reactants = -929840.3925324595\n",
      "LHV = 50.025 MJ/kg\n"
     ]
    }
   ],
   "source": [
    "import cantera as ct\n",
    "gas = ct.Solution('gri30.cti')\n",
    "\n",
    "gas.TPX = 300, 101325, 'CH4:1, O2:2'\n",
    "h_reactants = gas.enthalpy_mass\n",
    "Y_CH4 = gas['CH4'].Y[0] \n",
    "print('h_reactants =', h_reactants)\n",
    "\n",
    "gas.TPX = None, None, 'CO2:1, H2O:2' \n",
    "h_products = gas.enthalpy_mass\n",
    "\n",
    "print('LHV = {:.3f} MJ/kg'.format(-(h_products-h_reactants)/Y_CH4/1e6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Y_CH4 = 0.2004\n",
      "Y_H2O = 0.4502\n",
      "Prod enthalpy = -10.957 MJ/kg\n",
      "React enthalpy = -0.930 MJ/kg\n",
      "Water enthalpy = -15.858 MJ/kg\n",
      "Vapor enthalpy = -13.420 MJ/kg\n",
      "LHV = 50.025 MJ/kg\n",
      "HHV = 55.500 MJ/kg\n"
     ]
    }
   ],
   "source": [
    "water = ct.Water()\n",
    "\n",
    "water.TX = 300, 0\n",
    "h_liquid = water.h\n",
    "\n",
    "water.TX = 300, 1\n",
    "h_gas = water.h\n",
    "\n",
    "\n",
    "Y_H2O = gas['H2O'].Y[0]\n",
    "\n",
    "print('Y_CH4 = {:.4f}'.format(Y_CH4))\n",
    "print('Y_H2O = {:.4f}'.format(Y_H2O))\n",
    "print('Prod enthalpy = {:.3f} MJ/kg'.format(h_products/1e6))\n",
    "print('React enthalpy = {:.3f} MJ/kg'.format(h_reactants/1e6))\n",
    "print('Water enthalpy = {:.3f} MJ/kg'.format(h_liquid/1e6))\n",
    "print('Vapor enthalpy = {:.3f} MJ/kg'.format(h_gas/1e6))\n",
    "print('LHV = {:.3f} MJ/kg'.format(-(h_products-h_reactants)/Y_CH4/1e6))\n",
    "print('HHV = {:.3f} MJ/kg'.format(-(h_products-h_reactants + (h_liquid-h_gas) * Y_H2O)/Y_CH4/1e6))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1(c) = Calculating T adiabatic for phi between 0.5-2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "import yaml\n",
    "import numpy as np\n",
    "\n",
    "class thermo:\n",
    "    \n",
    "    def __init__(self, species, MW) :\n",
    "        \"\"\"\n",
    "        species: input string name of species in thermoData.yaml\n",
    "        M: input (species molecular weight, kg/kmol)\n",
    "        \"\"\"\n",
    "        \n",
    "        self.Rgas = 8.31446      # J/mol*K\n",
    "        self.M    = MW\n",
    "    \n",
    "        with open(\"thermoDataNASA-9.yaml\") as yfile:\n",
    "           yfile = yaml.load(yfile)\n",
    "        \n",
    "        self.a_lo = yfile[species][\"a_lo\"]\n",
    "        self.a_hi = yfile[species][\"a_hi\"]\n",
    "        \n",
    "        self.T_lo = 200.\n",
    "        self.T_mid = 1000.\n",
    "        self.T_hi = 6000.\n",
    "        \n",
    "    def cymalalo(self) :\n",
    "        return self.a_lo\n",
    "\n",
    "    def cymalahi(self) :\n",
    "        return self.a_hi\n",
    "\n",
    "    def cp_mole(self,T) :\n",
    "        \"\"\"\n",
    "        return calorific value at cst p in units J/kmol/K\n",
    "        T: input (K)\n",
    "        \"\"\"\n",
    "        if T<=self.T_mid and T>=self.T_lo :\n",
    "            a = self.a_lo\n",
    "        elif T>self.T_mid and T<=self.T_hi :\n",
    "            a = self.a_hi\n",
    "        else :\n",
    "            print (\"ERROR: temperature is out of range\")\n",
    "\n",
    "        cp = a[0]/T**2 + a[1]/T + a[2] + a[3]*T + a[4]*T**2.0 + a[5]*T**3 + a[6]*T**4\n",
    "        \n",
    "        return cp * self.Rgas\n",
    "        \n",
    "    #--------------------------------------------------------\n",
    "\n",
    "    def cp_mass(self,T) :\n",
    "        \"\"\"\n",
    "        return calorific value at cst P in units of J/kg/K\n",
    "        T: input (K)\n",
    "        \"\"\"\n",
    "        return self.cp_mole(T)/self.M\n",
    "\n",
    "    #--------------------------------------------------------\n",
    "    \n",
    "    def h_mole(self,T) :\n",
    "        \"\"\"\n",
    "        return enthalpy in units of J/mol\n",
    "        T: input (K)\n",
    "        \"\"\"\n",
    "        if T<=self.T_mid and T>=self.T_lo :\n",
    "            a = self.a_lo\n",
    "        elif T>self.T_mid and T<=self.T_hi :\n",
    "            a = self.a_hi\n",
    "        else :\n",
    "            print (\"ERROR: temperature is out of range\")\n",
    "\n",
    "        hrt = -a[0]/T**2 + a[1]*np.log(T)/T + a[2] + a[3]/2*T + a[4]/3*T**2.0 + a[5]/4*T**3 + a[6]/5*T**4 + a[7]/T\n",
    "        \n",
    "        return hrt * self.Rgas * T\n",
    "        \n",
    "    #--------------------------------------------------------\n",
    "\n",
    "    def h_mass(self,T) :\n",
    "        \"\"\"\n",
    "        return enthalpy in units of J/kg\n",
    "        T: input (K)\n",
    "        \"\"\"\n",
    "        return self.h_mole(T)/self.M\n",
    "\n",
    "    #--------------------------------------------------------\n",
    "        \n",
    "    def s_mole(self,T) :\n",
    "        \"\"\"\n",
    "        return entropy in units of J/mol/K\n",
    "        T: input (K)\n",
    "        \"\"\"\n",
    "        if T<=self.T_mid and T>=self.T_lo :\n",
    "            a = self.a_lo\n",
    "        elif T>self.T_mid and T<=self.T_hi :\n",
    "            a = self.a_hi\n",
    "        else :\n",
    "            print (\"ERROR: temperature is out of range\")\n",
    "        \n",
    "        sr = -a[0]/2/T**2 - a[1]/T + a[2]*np.log(T) + a[3]*T + a[4]/2.0*T**2.0 + a[5]/3.0*T**3.0+ a[6]/4.0*T**4.0+ a[8]\n",
    "        \n",
    "        return sr * self.Rgas\n",
    "        \n",
    "    #--------------------------------------------------------\n",
    "\n",
    "    def s_mass(self,T) :\n",
    "        \"\"\"\n",
    "        return entropy in units of J/kg/K\n",
    "        T: input (K)\n",
    "        \"\"\"\n",
    "        return self.s_mole(T)/self.M"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEOCAYAAACetPCkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xd8VFX6x/HPM5NeCJAA0hN6770XFQuK2BtFFAQFZC3ruu7adnXd31qRooiIHRABsRd670WQYughSAk1CWmT8/tjLhhiEjKQmTtJnvfrNS8md+7c+50Jk2fOveeeI8YYlFJKqcJy2B1AKaVU8aKFQymllEe0cCillPKIFg6llFIe0cKhlFLKI1o4lFJKeUQLh1JKKY9o4VBKKeURLRxKKaU8EmB3AG+IiYkxsbGxdsc4LyUlhfDwcLtjFMjfM/p7PvD/jP6eD/w/o7/ng8vLuG7dumPGmAoXXdEYU+JurVu3Nv5kwYIFdke4KH/P6O/5jPH/jP6ezxj/z+jv+Yy5vIzAWlOIv7F6qEoppZRHtHAopZTyiBYOpZRSHimRJ8fzkpmZSUJCAmlpaT7fd1RUFNu2bfP5fj3h7xntzBcSEkK1atUIDAy0Zf9K+ZtSUzgSEhKIjIwkNjYWEfHpvs+cOUNkZKRP9+kpf89oVz5jDElJSSQkJBAXF+fz/Svlj0rNoaq0tDSio6N9XjRU8SYiREdH29JSVcpflZrCAWjRUJdE/98odaFSVThU8ZSUnE7S2Wxc2TrNsVL+QAtHCTV48GBmzpxZ4DpTp04lMTHRR4ny99xzz/HKK6/k+djZjCwOnjzL6QzDnmMpuLKz893OnDlz+PXXX8///Mwzz/Dzzz8XeV6lSjstHKWYvxSO/BhjSDzlPrcgQGpGFruPpZDlyrt45C4cL7zwAldeeaUvoipVqmjh8KEPP/yQZs2a0bx5cwYMGADAvn376N27N82aNaN3797s378fcLcYRowYQc+ePalVqxaLFi1iyJAhNGzYkMGDB5/fZkREBI899hitWrWid+/eHD169E/7XbduHd27d6d169b06dOHQ4cOMXPmTNauXcs999xDixYtOHv2bJ7r5Xb48GH69+9P8+bNad68OcuXLwfgtddeo0mTJjRp0oQ33ngDgL1799KgQQMeeOABmjRpwj333MPPP/9M586dqVu3LqtXrz6/3U2bNtGrVy/q1q3Lu+++C8A3P/zMfXfdQoBDqBzh4L/P/JVpH3/E7mMp/PWvT9KoUSOaNWvG448/zvLly5k7dy5PPPEELVq0YNeuXRe0uubNm0fLli1p2rQpQ4YMIT09HYDY2FieffZZWrVqRdOmTdm+ffvl/pqVKvFKTXfcnGL/9o1Xtrv35evzfWzr1q28+OKLLFu2jJiYGI4fPw7AyJEjGThwIIMGDWLKlCmMHj2aOXPmAHDixAnmz5/P3LlzueGGG1i2bBmTJ0+mbdu2bNy4kRYtWpCSkkKrVq149dVXeeGFF3j++ecZN27c+f1mZmYyatQovvzySypUqMD06dN5+umnmTJlCuPGjeOVV16hTZs2HD9+PN/1cho9ejTdu3dn9uzZuFwukpOTWbduHe+//z6rVq3CGEP79u3p3r075cqVIz4+ns8//5xJkybRtm1bPv30U5YuXcrcuXN56aWXzr/WzZs3s3LlSlJSUmjZsiXXXnsdx1MyAKhUJoQgk0FUSCABTgeHjxzj81mz2LF9O0EBTk6ePEnZsmW58cYb6du3L7feeusFmdPS0hg8eDDz5s2jXr16DBw4kIkTJzJmzBgAYmJiWL9+PRMmTOCVV15h8uTJl/k/QamSTVscPjJ//nxuvfVWYmJiAChfvjwAK1as4O677wZgwIABLF269PxzbrjhBkSEpk2bUqlSJZo2bYrD4aBx48bs3bsXAIfDwR133AHAvffee8HzAXbs2MGWLVu46qqraNGiBf/+979JSEj4U77ffvutUOvNnz+fESNGAOB0OomKimLp0qX079+f8PBwIiIiuPnmm1myZAkAcXFxF+Tu3bv3+dd07jUA9OvXj9DQUGJiYujZsyc/L15GZrbBKUL58CDrtQoVI4OILl+WoKBg7h54HzM+n0lYWFiB7/2OHTuIi4ujXr16AAwaNIjFixeff/zmm28GoHXr1hdkUkrlrVS2OApqGXiLMaZQ3TpzrhMcHAy4i8O5++d+zsrKuujzz+23cePGrFix4qL5CrNefs/NT+7cOV9TzteQM3e2MZxOy6JMiJNAp5x/LC0tDafDQb0ropj1/UIWLpzPJzO+YOKE8SxYsOCS8uXM6HQ6831flVJ/0BaHj/Tu3ZsZM2aQlJQEcP5QVadOnZg2bRoAn3zyCV26dPFou9nZ2eeP43/66ad/en79+vU5evTo+YKQmZnJ1q1bAYiMjOTMmTMA1K1bN9/1cr+OiRMnAuByuTh9+jTdunVjzpw5pKamkpKSwuzZs+natatHr+PLL78kLS2NpKQkFixYSKNmLalXuxY7t28jPT2dU6dOMW/ePADSzqZSLjCLPtdcx+PPvMT6jRtJz3Rd8HpyatCgAXv37iU+Ph6Ajz76iO7du3uUTyn1h1LZ4rBD48aNefrpp+nevTtOp5OWLVsydepUxo4dy5AhQ/jf//5HhQoVeP/99z3abnh4OFu3bqV169ZERUUxffr0Cx4PCgpi5syZjB49mlOnTpGVlcWYMWNo3LgxgwcPZvjw4YSGhvLjjz/mu15Ob775JsOGDeO9997D6XQyceJEOnbsyODBg2nXrh0ADzzwAC1btvTosE+7du24/vrr2bdvPw+MfpxKlatQr2IEt99+O82aNSMuLo6WLVsC7uFHburXj7S0NNIzXTzxzEvsOpZC/1tvY+SI4YwdO/aCrsghISG8//773HbbbWRlZdG2bVuGDx/u0fuslPqDXKwZXxy1adPGrF279oJl27Zto2HDhrbk8eY4SxERESQnJ1/2dvxhrCpjDLuPppCSkUWFiGAqlw09/1h++VzZhn1JKSSnZxHgcBAXE05okLPIsxXm/8/ChQvp0aNHke+7qPh7PvD/jP6eDy4vo4isM8a0udh6eqhK+Y1TZzNJyXAXgIplgi/+BMDpEGKjw4kMCSQrO5vdx5JJzdDzFEp5kxaOYq4oWhv+IDvb8Lt1sV+lMsE4HYX/r+lwCDWjwygTEogr27DnaAop6Vo8lPKWUlU4SuJhuZLiWHI6Ga5sQgKd57vfesIhQo3oMKJCA3EZ9/AkyUVUPPT/jVIXKjWFIyQkhKSkJP0j4IcyXdkcOeO+krtKVMglj0brEKFG+TDKhQWRbQx7j6VwJi3zsrKdm48jJCTksrajVElSanpVVatWjYSEhDyH5PC2tLQ0v//DY2fGEykZpGS4CA10cOBM3uc2PMlnDCSfzSAl3cXv+yE6PIiQwEs/YX5uBkCllFupKRyBgYG2zeC2cOHC811J/ZVdGTcdOMndHywj0Cn8/Gh3akaH57mep/mysw3PfbWVD1fsI9ApvHVXS65pUrmoYitVqpWaQ1XK/xhjeOFr92i2QzrH5Vs0LoXDITx/Y2OGdatFpsvw8Kcb+HLjwSLbvlKlmRYOZZuvNh9i3b4TxEQEMbJXnSLfvojw1LUNGNWrDq5sw5jpG/l87YEi349SpY0WDmWLtEwXL3+7DYDHr65PZEigV/YjIjx2dX0ev7oexsATMzfz8cp9XtmXUqWFFg5li0mLd5N4Ko2GlctwW5vqXt/fyF51+cf17iu//zFnC+8t3eP1fSpVUmnhUD73+6k0Ji7cBcAzfRvhdFxa91tPPdC1Fi/0c4+99a+vf+W1H3do92ylLoEWDuVz//f9ds5murim8RV0rB3t030P7BjL/93SDIfA2PnxPPb5JjKy8p/HXCn1Z1o4lE9t2H+CWRsOEuR08Pfr7Bl08va21Zk8qA1hQU5mrT/I4PdXc/oyLxRUqjTRwqF8Jmf32/u7xlEjuuCZ+7ypV4NKTB/WkQqRwSzflcRtE1eQePKsbXmUKk60cCifmbspkQ37TxITEczDPYu++62nmlaLYtaITtSpGMGOw2foP2EZWxNP2R1LKb+nhUP5RGpGFi9/tx2Av/apT0SwfwxaUL18GF8M70T7uPIcPp3O7W+vYOGOI3bHUsqvaeFQPjFp8W4OnUqjcZUy3NLav8Z9igoL5MP729GvRRVSMlzc/8Fapq/Zb3cspfyW1wqHiFQXkQUisk1EtorII9by/4nIdhHZLCKzRaRsjuc8JSLxIrJDRPrkWH6NtSxeRP7mrczKOxJPnuXtRe7ut8/e0Nhn3W89ERzg5PXbW/Bwz9q4sg1PfvELr2p3XaXy5M0WRxbwmDGmIdABeFhEGgE/AU2MMc2AncBTANZjdwKNgWuACSLiFBEnMB64FmgE3GWtq4qJ//t+O2mZ2VzftDLt4srbHSdfDofwRJ8GvNS/KU6H8Nb8eB6bod11lcrNa4XDGHPIGLPeun8G2AZUNcb8aIw5N8POSuDccYt+wDRjTLoxZg8QD7SzbvHGmN3GmAxgmrWuKgbW7z/BnI2JBAU4+Nu1DeyOUyh3t6/B5IFWd90NBxk0ZTWnzmp3XaXO8ck5DhGJBVoCq3I9NAT4zrpfFcg5Al2CtSy/5crPZWcbXvjK3f12aNc4qpe3r/utp3o2qMiMB93ddVfsTuK2t5dzULvrKgWAePsYrohEAIuAF40xs3IsfxpoA9xsjDEiMh5YYYz52Hr8PeBb3MWtjzHmAWv5AKCdMWZUrv0MA4YBVKpUqfW0adO8+ro8kZycTEREhN0xCuSNjMsTs5i0OZ2oYOHlrqGEBlz6uQ273sNjZ7N5bV0aicmGssHCX1oHU7NM3pNC+fvv2d/zgf9n9Pd8cHkZe/bsuc4Y0+aiKxpjvHYDAoEfgEdzLR8ErADCcix7Cngqx88/AB2t2w/5rZfXrXXr1safLFiwwO4IF1XUGVPSM037F382NZ/82sxYs/+yt2fne3gyNcPc8c5yU/PJr03Df35n5m8/nOd6/v579vd8xvh/Rn/PZ8zlZQTWmkL8bfdmryoB3gO2GWNey7H8GuBJ4EZjTGqOp8wF7hSRYBGJA+oCq4E1QF0RiRORINwn0Od6K7cqGm8v2s3vp9NoWjWKW1r5V/dbT0WFBvLBkHbc1KIKqRkuHvhgLZ+u0u66qvTy5lVYnYEBwC8istFa9ndgLBAM/OSuLaw0xgw3xmwVkRnAr7h7ZD1sjHEBiMhI3C0QJzDFGLPVi7nVZTp48izvWN1vn7mhEQ4/7H7rqeAAJ6/f0YJq5cIYtyCev8/+hYMnU3n86vpY/4+VKjW8VjiMMUuBvD5R3xbwnBeBF/NY/m1Bz1P+5b/fbSc9K5u+zSrTNtZ/u996SkR4vE99qpYL5R9ztjB+wS4OnjjLf29tRnBA3uc9lCqJ9MpxVaTW7z/B3E2JBBej7reeuqtdDSYPakN4kJM5GxPd3XVTtbuuKj20cKgiY4zh5W/d41Hd3yWOauWKT/dbT/WsX5HpD3akYmQwK3cf55a3l3M0VS8UVKWDFg5VZOZtO8LqvccpFxbI8B617Y7jdU2qRjH74c7UqxRB/JFk/rXyLOv3n7A7llJep4VDFYksVzYvf+9ubYzqVZcyIYE2J/KNqmVD+Xx4J7rUieF0Btw5aSVzNyXaHUspr9LCoYrEzHUJxB9Jpnr5UO7pUMPuOD4VFRrI+/e1pUf1ADKyshn92QZe/2mnDpCoSiwtHOqypWZk8frPOwF4ok+DUtnDKNDpYFCjIJ7p2wiHwJvzfmP0tI2kZbrsjqZUkdPCoS7blKV7OHw6naZVo+jbtLLdcWwjIgzpEsd7g9oSERzAV5sSuXPSSo6cSbM7mlJFSguHuixJyem8vWg3AE9d26BEXOx3uXo2qMjMER2pWjaUjQdO0n/8crYdOm13LKWKjBYOdVnemh9PcnoWPepXoFOdGLvj+I0GV5Thy5GdaVWjLAdPnuXWicuZt+2w3bGUKhJaONQl25eUwier9iECT15TMi/2uxwxEcF8OrTD+SlpH/hwLZOX7NaT5qrY08KhLtn/fthBpstwc8tqNKxcxu44fikk0Mkbd7Tg0avqYQz8+5tt/H32FjJderGgKr60cKhLsunASb7efIigAAePXV3P7jh+TUQY3bsu4+5uSXCAg89W79dhSlSxpoVDecwYw3++2wbAfZ1jqVI21OZExUPfZlWY/mBHYiKCWb4rif4TlrHnWIrdsZTymBYO5bGFO46ycvdxokIDeah7HbvjFCstqpfly5GdaVi5DLuPpXDT+GWs2JVkdyylPKKFQ3nElW14+Tv30CIje9YhKqx0DC1SlKqWDWXm8I5c2bAip85mMuC9VUxfoxNDqeJDC4fyyBfrE9hx+AxVy4YyoGNNu+MUW+HBAbwzoA1Du8aRlW148otfeOnbbbiytceV8n9aOFShpWW6eP0n99Aij/epR0hg6RtapCg5HcLT1zfi5ZubEuAQJi3ezYMfrSMlPcvuaEoVSAuHKrT3l+3l0Kk0GlUuQ7/mVe2OU2Lc2a4GH97fjqjQQH7edphb315B4smzdsdSKl9aOFShnEjJYMLCeACeuk6HFilqnWrHMOfhztSKCWfbodP0G7+MjQdO2h1LqTxp4VCFMm5BPGfSsuhaN4audSvYHadEiosJZ/ZDnelUO5qjZ9K5450VzN6QYHcspf5EC4e6qAPHU/loxT5AhxbxtqiwQD4Y0o6729cgPSubv0zfpCfNld/RwqEu6pUfd5DhyqZ/y6o0qRpld5wSL9Dp4KX+Tfn3TU3OnzS/b+oavdJc+Q0tHKpAWw6e4suNiQQ5HTx6lQ4t4kv3dqjJJw+0p3x4EIt3HqXf+KXEHzljdyyltHCo/OUcWmRgx5pULx9mc6LSp32taOaO7EyjymXYm5TKTeN1eHZlPy0cKl+LfzvGsvgkyoQEMLKXDi1il2rlwpg5oiPXN6tMcnoWD3y4lvEL4nV4dmUbLRwqT9k5hhZ5qGcdyoYF2ZyodAsLCmDcXS15ok99wD2k/cjPNpCaoRcLKt/TwqHyNGfjQbYdOk3lqBAGd4q1O47CPTz7wz3rMHlgGyKCA/hm8yFunbiChBOpdkdTpYwWDvUnaZkuXv3RPbTIY1fX16FF/EzvhpWY83An4mLC+fXQaW4ct4yVu3WEXeU7WjjUn3y4Yi8HT56lwRWR9G+pQ4v4ozoVI5nzUGe61avA8ZQM7p28io9W7tPzHsontHCoC5xMzWDcfPfQIk9e2wCnDi3it6LCAnl/cFse7FaLrGzDP+ds4e+zt5CRpdPSKu/SwqEuMGHhLk6nZdGxVjQ96unQIv7O6RCeuq4hb9zR4vy0tHe/u5KjZ9LtjqZKMC0c6ryDJ88ydflewD2QoYi2NoqLm1pW5fPhHakcFcLafSe4cdxSfkk4ZXcsVUJp4VDnvfrjDjKysrmheRWaVStrdxzloWbV3NPStq5ZjkOn0rj17eV8ufGg3bFUCaSFQwGw/7SL2RsOEugUnri6vt1x1CWqGBnCp0Pbc2fb6qRnZfPItI385zsdJFEVLS0cCoAZOzMxxj0+Uo1oHVqkOAsOcPKfm5vyQr/GOB3CO4t2c/8Ha0jJ1OKhioYWDsXS346x5ZiLyOAARvWqa3ccVQREhIEdY/n4/vaUCwtk4Y6j/GvFWX47rIMkqsunhaOUy87+YyDD4T1qUz5chxYpSTrWjmbuyC40uCKS31MN/cYv45vNh+yOpYo5LRyl3FebE9maeJqywcKQznF2x1FeUL18GLMe6kSHyk5SM1w8/Ol6Xvp2G1kuvd5DXRqvFQ4RqS4iC0Rkm4hsFZFHrOXlReQnEfnN+rectVxEZKyIxIvIZhFplWNbg6z1fxORQd7KXNpkubJ5/Sf30CI31QkkNEiHFimpwoICeLBZMM/0bXR+cqgB763mWLJe76E8580WRxbwmDGmIdABeFhEGgF/A+YZY+oC86yfAa4F6lq3YcBEcBca4FmgPdAOePZcsVGXZ9b6g+xNSiU2OowuVQPsjqO8TEQY0iWOT4d2oEJkMCt2J3HDW0vZsP+E3dFUMeO1wmGMOWSMWW/dPwNsA6oC/YAPrNU+AG6y7vcDPjRuK4GyIlIZ6AP8ZIw5bow5AfwEXOOt3KVFepaLN+f9BsCYK+sRoEOLlBrt4srzzagutLGu97jjnZV8skrHuVKF55NzHCISC7QEVgGVjDGHwF1cgIrWalWBAzmelmAty2+5ugwz1hzg4Mmz1K0YwQ3Nq9gdR/lYxTIhfDq0A4M7xZLhyubp2Vv468zNpGW67I6migHx9rcMEYkAFgEvGmNmichJY0zZHI+fMMaUE5FvgP8YY5Zay+cBfwV6AcHGmH9by/8JpBpjXs21n2G4D3FRqVKl1tOmTfPq6/JEcnIyERERdsc4L8Nl+Ovis5xMNzzcIpi2VwT4Xcbc/D0f+H/G/PItT8xi6pZ0MrKhZhkHI1sEUyHMnn4zxfU99CeXk7Fnz57rjDFtLrZevge2RWRWIfZz3BjzQAHbCAS+AD4xxpzb3mERqWyMOWQdijpiLU8Aqud4ejUg0VreI9fyhbn3ZYyZBEwCaNOmjenRo0fuVWyzcOFC/CnP5CW7OZm+jcZVyvDY7V1wOMTvMubm7/nA/zPml68HcFPiaYZ/vI59x1N5cW0WY+9sSTcbBrksru+hP/FFxoK+VjQFxhdwmwB0zO/J4h4h7z1gmzHmtRwPzQXO9YwaBHyZY/lAq3dVB+CUdSjrB+BqESlnnRS/2lqmLkFyehYTFu4C4PGr6+PQcxsKaFSlDF+N7ELP+hU4mZrJoPdXM27+b2TrUCUqDwV1pXnWGDOvoCeLyIsFPNwZGAD8IiIbrWV/B14GZojI/cB+4DbrsW+B64B4IBW4D8AYc1xE/gWssdZ7wRhzvKBcKn9Tl+3heEoGrWqUpUd9HTZd/SEqLJD3BrVl7PzfeHPeb7zy4042JZzi1dubUyYk0O54yo8UVDg25/eAiAw1xrxrjPk0v3WscxX5fZ3tncf6Bng4n21NAaYUkFUVwqnUTN5ZvBtwtzZ02HSVm8MhjLmyHs2rleWRaRv46dfD9Bu3jLfvbU39KyLtjqf8REGHquaKSMvcC62T0yO9F0l5y+SluzljTdLUqU6M3XGUH+vZoCJfjXIPVbLnWAo3jV/GV5sS7Y6l/ERBheNO4AsRaXdugYiMA64Euns7mCpaScnpTFm6B4DHrq5ncxpVHNSMDmf2Q53p37IqZzNdjPpsA//6+lcydaiSUi/fwmGMWQ3cDEwTkStFZDruHk19jDEnfRVQFY13Fu8mJcNFj/oVaBNb3u44qpgIDXLy2u3Nef7GxgQ4hPeW7uHeyat0atpSLt/CISJlgN3AvcA0wOA+YR1kPaaKiSOn0/jAmhL2sat0kiblGRFhUKdYpg3rQMXIYFbtOU7ft5awXocqKbUKOlS1FdiCu2icxd1LalOO5aqYGL8gnvSsbPo0rkTTalF2x1HFVJvY8nw9ugvtYstz+HQ6d7yzgg+W79WhSkqhgg5VVTfG1LBu1XP8XN0YU8OXIdWlSziRyqer9yMCj2prQ12mipEhfDK0Pfd1jiXTZXh27lZGfraBM2mZdkdTPlTQoaqLdrspzDrKXm/NiyfTZbixeRXtTqmKRKDTwbM3NGbc3S2JCA7gm82HuHHcMn5NPG13NOUjBR2q+rEQzy/MOsome46lMHN9Ak6H8EhvnRJWFa2+zaowd2Tn8112+09YxvQ1+/XQVSlQUOFoLiLHC7idACr5Kqjy3Js/78SVbbilVVVqVfDvgdlU8VSrQgRzHu7MnW2rk56VzZNf/MJjn28iNSPL7mjKiwq6crwwk0/rVws/tfPwGb7clEigUxjVS1sbyntCAp28fEsz2saW5x9ztjBr/UG2HDzFhHtaUaeiHh4tiQo6Oe4qxE2vBPJTr/+0E2PgzrY1qF4+zO44qhS4pXU1vhzZmdoVwtl5OJkbxy3jy40H7Y6lvMCeQfeVV205eIrvtvxOcICDkb3q2B1HlSL1KkUyd2QX+rWoQmqGi0embeTvs3/RCaJKGC0cJdBrP+0EYGDHmlQqE2JzGlXahAcH8MYdLXipf1OCAhx8umo/N09Yzr6kFLujqSJSqMIhIs1E5CERGSEizbwdSl26dftOMH/7EcKCnAzvXtvuOKqUEhHubl+DWSM6UTM6jF8Pnabv2KV8v+WQ3dFUEbho4RCRp4HPcM/zXQ34VESe8nYwdWle/XEHAEM6xxEdEWxzGlXaNakaxVejunBtkys4k57F8I/X8/xXW8nI0tOjxVlhWhz3Am2NMU8bY54G2gEDvRtLXYrl8cdYviuJyJAAhnatZXccpQAoExLIhHta8UzfRgQ4hPeX7eX2d1Zw8ORZu6OpS1SYwrGPC7vtBuAe/FD5EWMMr1rnNoZ1rUVUmM7YpvyHiDCkSxwzhnekatlQNh44yfVjlzB/+2G7o6lLUJjCkQpsFZHJIvIu8AtwUkReE5HXLvJc5SMLdx5l3b4TlAsL5L4ucXbHUSpPrWqU4+tRf8xtPmTqWv77/XaydI6PYqWgCwDP+ca6nbPSS1nUJTLGnD+3MaJHbSKCC/NrVcoe5cKDeG9QW95ZvJtXftzBxIW7WLfvBG/d9acJR5WfuuhfGGPMe74Ioi7dD1sPs+XgaSpGBjOgQ6zdcZS6KIdDGNGjNq1qlGXUZxtYvec41725hCENHfSwO5y6qML0qrpGRNaIyJFzY1SJyHFfhFMX58o2vPaTu7UxslcdQoOcNidSqvDa14rmm9Fd6VwnmqSUDF5Zm8b/ftBDV/6uMOc4xgEP4u6OWwGIsf5VfuDrzYnsPJxM1bKh3NG2ut1xlPJYhchgPhzSnr9cWQ+A8Qt2cceklSScSLU5mcpPYQpHArDRGJOZc5wqbwdTF5flyuZ1qyfV6N51CA7Q1oYqnpwO4ZEr6/K3diFcUSaEdftOcN2bS/juF71g0B8VpnD8FfhKRJ4QkdHnbt4Opi5u1vqD7E1KJTY6jJtbVbM7jlKXrX55J9890pUrG1bkdFoWIz5Zzz/m6FhX/qYwheN5wAWUxX2I6txN2Sg6eDMbAAAasklEQVQ9y8Wb834DYMyV9Qh06rBjqmQoFx7EuwPb8NwNjQhyOvh45X5uGr+M+CNn7I6mLIXpt1nRGNPa60mUR2asOcDBk2epWzGCG5pXsTuOUkVKRBjcOY42seUZ/dkGtv9+hr5vLeX5Gxtze5vqiIjdEUu1wnxNnScivbyeRBVaWqaLt+bHA/DoVfVwOvRDpEqmc2Nd3dKqGmmZ7hkGR0/byOm0TLujlWqFKRxDgZ9FJFm74/qHj1fu48iZdBpXKcM1Ta6wO45SXhUeHMCrtzfntdubExbk5KtNifQdu5RNB07aHa3UKkzhiAECgSi0O67tktOzmLBwFwCPX11fm+yq1Li5VTW+HtWFxlXKsP94KrdMXM6kxbvIztYZrH3tooXD6np7G/Ckdb8y0MLbwVTepi7bw/GUDFrVKEuP+lq/VelSq0IEsx7qxJDOcWRlG176djuDp67hWHK63dFKlcJcOT4O6AkMsBalAm97M5TKW3J6FpOX7gHgMW1tqFIqOMDJMzc0YvLANpQLC2TxzqNc++YSlv52zO5opUZhDlV1MsY8CKQBGGOOA0FeTaXy9NGKfZxMzaRNzXJ0qh1tdxylbHVlo0p8+0hX2sWV5+iZdAZMWcX/fthOpg5X4nWFKRyZIuIADICIRAP6m/Gx1IwsJi9xT4MyqnddbW0oBVSOCuWzoR0Yc2VdBGu4kndW6HAlXpZv4RCRc9d4jAe+ACqIyPPAUuC/Psimcvh01X6SUjJoXi2KbnVj7I6jlN9wOoQxV9bjs6EduKJMCOv3n9ThSrysoBbHagBjzIfAP4BXgBPAbcaYaT7IpixpmS4mLbZaG720taFUXtrXiv7TcCVPz/6Fsxk6XElRK6hwnP/rZIzZaox50xjzhjFmiw9yqRxmrD3AkTPpNKpcht4NK9odRym/dW64kmet4Uo+WbWfG8YtZWviKbujlSgFDTlSQUQeze9BY4xOG+sDGVnZvG1dtzGqVx1tbSh1ESLCfZ3jaBdXnkembST+SDI3jV/GE33q80CXWjh0pIXLVlCLwwlEAJH53JQPfLE+gcRTadSrFEGfxnqVuFKF1bhKFF+N7MKADjXJdLmv+RgwZRW/n0qzO1qxV1CL45Ax5oVL3bCITAH6AkeMMU2sZS1wXwMSAmQBDxljVov7a/SbwHW4rxMZbIxZbz1nEO5zLAD/NsZ8cKmZiptMVzYTFrrHpHq4Zx39pqSUh0KDnPzrpib0qF+Bv87czLL4JPq8sZiXb27KtU0r2x2v2CrUOY5LNBW4Jtey/wOeN8a0AJ6xfga4Fqhr3YYBEwFEpDzwLNAeaAc8KyLlLjNXsfHlxkQOHD9LrZhw+jbTEXCVulS9G1bi+zHd6FG/AqfOZjLik/X8deYmUtKz7I5WLBVUOHpfzoaNMYuB3IMhGqCMdT8KSLTu9wM+NG4rgbIiUhnoA/xkjDlujDkB/MSfi1GJ5Mo2TFjgbm081LOOjoCr1GWqEBnM+4Pb8vyNjQkOcDBjbQLXjV3Chv0n7I5W7ORbOKwrxIvaGOB/InIAd/fep6zlVYEDOdZLsJblt7zE+3pzIruPpVC9fCj9WmhrQ6miICIM6hTLV6O60OCKSPYlpXLr2yt4a95vuHSwxEITY7z3ZolILPB1jnMcY4FFxpgvROR2YJgx5koR+Qb4jzFmqbXePNxT1vYCgo0x/7aW/xNINca8mse+huE+zEWlSpVaT5vmP5eaJCcnExERUej1s43hn8vOcjDZMLhxED2qB3oxnZunGX3N3/OB/2f093zg24yZ2YYvdmbw/V734aq6ZR0MaxZMhbD8D8SU9PewZ8+e64wxbS66ojHGazcgFtiS4+dT/FGsBDht3X8HuCvHejtwj8J7F/BOjuUXrJffrXXr1safLFiwwKP1v92caGo++bXp+NLPJj3T5Z1QuXia0df8PZ8x/p/R3/MZY0/GJTuPmnYv/mRqPvm1afLM92b2+oR81y3p7yGw1hTib7uvJ6pOBLpb93sBv1n35wIDxa0DcMoYcwj4AbhaRMpZJ8WvtpaVWMaY87P7De9Rm6AAnUtcKW/qUjeG7x/pRp/GlTiTnsWY6Rt5ZNoGTp3VWQbzU5g5xy+JiHwG9ABiRCQBd++oocCb1jhYaViHloBvcXfFjcfdHfc+cJ9nEZF/AWus9V4w3jn34jfmbTvCr4dOUzEymNvbVLc7jlKlQrnwIN6+tzUz1h7gubm/8uXGRNbuPcHrd7SgXVx5u+P5Ha8VDmPMXfk81DqPdQ3wcD7bmQJMKcJofsvd2nA3woZ1q0VIoNPmREqVHiLCHW1r0C4umjHTNrAp4RR3TlrBiB61GXNlPQKd2vo/R98JP7L4t2NsSjhFdHgQ97SvaXccpUqluJhwZo7oxMiedQD3UO23TlzOnmMpNifzH1o4/IQxhrfmuVsbD3StRWiQtjaUskug08HjfeozbVhHqpYNZVPCKa4fu4RFBzLPddQp1bRw+IkVu5NYu+8EZcMCGdBRWxtK+YN2ceX5bkxX+rWoQmqGi/e3ZjDso3Wlfo5zLRx+4q157p5UQzrHERHstVNPSikPlQkJ5M07W/LGHS0IDYCffj3M1a8v5vstv9sdzTZaOPzA2r3HWbE7icjgAAZ1irU7jlIqDze1rMq/O4fSuU40x1MyGP7xOh6dsZHTaaWv264WDj8w1rpuY3DnWKJCvX+VuFLq0kSHOvhoSHuev7ExIYEOZq0/yDWvL2ZZ/DG7o/mUFg6bbTxwksU7jxIe5GRI5zi74yilLsLhcI939c3orjSvXpbEU2ncM3kVz83dWmqmqdXCYbNx1nUb93asSbnwIJvTKKUKq3aFCL4Y3pHHrqpHgEOYunwv17+1hI0HTtodzeu0cNhoa+Ipft52hJBAB0O71rI7jlLKQwFOB6N612XOw52pWzGC3UdTuGXicl77cQeZrmy743mNFg4bjbPObdzdriYxEcE2p1FKXaomVaP4alQXhnaNI9sYxs6Pp/+EZew8fMbuaF6hhcMmOw+f4bstvxMU4ODB7traUKq4Cwl08vT1jZg2tAPVyoWy5eBp+r61lMlLdpNdwub60MJhk3OtjTvaVKdSmRCb0yilikr7WtF8P6Ybd7atTkZWNv/+Zht3vbuSA8dT7Y5WZLRw2GD30WS+3pxIoFMY3qO23XGUUkUsIjiAl29pxnuD2hATEcyqPce55o3FTF+zv0QMWaKFwwbjF+wi28AtrapRtWyo3XGUUl7Su2ElfvxLN65tcgUpGS6e/OIXHvhgLUfOpNkd7bJo4fCx/UmpzNl4EKdDeKhHHbvjKKW8rHx4EBPuacUbd7QgMiSAeduP0Of1xXz3yyG7o10yLRw+NnFRPK5sQ78WVagRHWZ3HKWUD4gIN7Wsyo9/6UaXOjGcSM1kxCfr+cv0jZxKLX5Dlmjh8KGDJ88yc10CIvBwT21tKFXaVI4K5cMh7Xihn3vIktkbDnL1G4tYsP2I3dE8ooXDh95ZtItMl6FvsyrUrhBhdxyllA0cDmFgx1i+Hd2VVjXKcvh0OvdNXcNjMzYVm9aHFg4fOXI6jWlrDgCcn1lMKVV61aoQwefDO/H0dQ0JDnDwxfoErn5jEfO3H7Y72kVp4fCRdxbvJiMrm2saX0H9KyLtjqOU8gNOhzC0Wy2+feSP1seQqWv9vvWhhcMHTqcbPlm1D4CRvbS1oZS6UO1i1vrQwuED3+/NJC0zm94NKtKkapTdcZRSfihn66N1zXLnWx+PzvC/nldaOLzsREoG8/e7f+mjete1OY1Syt/VrhDBjAc78o/r3a2PWesPctXri5i3zX9aH1o4vOz9ZXtIc0HXujG0qF7W7jhKqWLA6RAe6FqL76zWx5Ez6dz/wVoe9ZPrPrRweNGZtEzeX74XgNHa2lBKeahW7tbHBnfr4+df7W19aOHwommrD3AmLYt65Ry0jS1vdxylVDGUs/XRxmp9PPChu/VxMjXDlkxaOLwkIyub95buAeC6uECb0yilirtaFSKY/mBH/tm3ESGB51ofi21pfWjh8JK5mxL5/XQa9SpF0KyC0+44SqkSwOkQ7u8Sx3ePdKNNzXIctVoff/Fx60MLhxdkZxsmLd4FwLButXGI2JxIKVWSxMWEM/3BjjxjtT5mW62Pn3zU+tDC4QULdx5h5+FkrigTwo3Nq9gdRylVAjkdwhCr9dE21t36GPrhWt7ZlOb11ocWDi94e9FuAO7vEkdQgL7FSinviYsJZ/qwP1ofG464SE7P8uo+A7y69VJow/4TrN5znMjgAO5sV93uOEqpUsBhtT56NajI7PkrqFbOu3P96NfhIjZpsbu1cU+HmkSGaG8qpZTvxMaE07Ki99sDWjiK0J5jKXy/9XeCnA7u6xxrdxyllPIKLRxF6N0luzEG+resSqUyIXbHUUopr9DCUUSOnkln5roEAIZ2q2VzGqWU8h4tHEXkg+V7ycjK5qpGlahTUaeFVUqVXFo4ikBKehYfrXRP1PSgtjaUUiWc1wqHiEwRkSMisiXX8lEiskNEtorI/+VY/pSIxFuP9cmx/BprWbyI/M1beS/H9DUHOHU2k9Y1y9FGBzNUSpVw3uy3NRUYB3x4boGI9AT6Ac2MMekiUtFa3gi4E2gMVAF+FpF61tPGA1cBCcAaEZlrjPnVi7k9kun6YzBDbW0opUoDrxUOY8xiEYnNtXgE8LIxJt1a54i1vB8wzVq+R0TigXbWY/HGmN0AIjLNWtdvCsc3mw9x8ORZalUI58qGleyOo5RSXifGGO9t3F04vjbGNLF+3gh8CVwDpAGPG2PWiMg4YKUx5mNrvfeA76zNXGOMecBaPgBob4wZmce+hgHDACpVqtR62rRpXntd5xhjeGZ5GgfOZHNfkyC6V8v7gr/k5GQiIvz7hLm/Z/T3fOD/Gf09H/h/Rn/PB5eXsWfPnuuMMW0utp6vhxwJAMoBHYC2wAwRqQXkNXysIe9zMHlWOmPMJGASQJs2bUyPHj2KIm+BFu08yoEzq6kQGczf7uxJcEDew6cvXLgQX+S5HP6e0d/zgf9n9Pd84P8Z/T0f+CajrwtHAjDLuJs5q0UkG4ixlucc2KkakGjdz2+57d5Z5B46/b7OsfkWDaWUKml83R13DtALwDr5HQQcA+YCd4pIsIjEAXWB1cAaoK6IxIlIEO4T6HN9nDlPvyScYvmuJMKDnNzTvqbdcZRSyme81uIQkc+AHkCMiCQAzwJTgClWF90MYJDV+tgqIjNwn/TOAh42xris7YwEfgCcwBRjzFZvZfbEO9ZETXe3r0FUqA5mqJQqPbzZq+qufB66N5/1XwRezGP5t8C3RRjtsu1PSuXbXw4RYA1lrJRSpYleOX4JJi/dTbaBfi2qUjkq1O44SinlU1o4PJSUnM6MtQcAGKYX/CmlSiEtHB76cMU+0jKz6Vm/AvWviLQ7jlJK+ZwWDg+czXDx4Yq9ADzYvbatWZRSyi5aODzw+boDnEjNpHn1srSP08EMlVKlkxaOQspyZfPuEvd84sO71UIkr4vdlVKq5NPCUUjfbfmdA8fPEhsdxtWNr7A7jlJK2UYLRyEYY85f8De0Wy2cDm1tKKVKLy0chbB8VxJbDp4mOjyIW1pVszuOUkrZSgtHIbxtDWY4uFMsIYE6mKFSqnTTwnERvyaeZslvxwgNdDKgow5mqJRSWjguYpJ1buPOdtUpGxZkcxqllLKfFo4CJJxI5avNh3A6hPt1MEOllAK0cBTovaV7cGUbbmhWmWrlwuyOo5RSfkELRz5OpGQwbfW5wQx1eBGllDpHC0c+Pl65j7OZLrrWjaFRlTJ2x1FKKb+hhSMPaZkupi7fC8BwHcxQKaUuoIUjD1+sTyApJYMmVcvQqXa03XGUUsqvaOHIxZVteHexezDDB7vV1sEMlVIqFy0cufy49Xf2JqVSrVwo1zbRwQyVUio3LRw5GGPODy8ytGstApz69iilVG76lzGHVXuOsynhFOXCArmtjQ5mqJRSeQmwO4A/SUrOICYiiHva1yQsSN8apZTKi/51zOH6ZpXp3bAirmxjdxSllPJbWjhy0WHTlVKqYHqOQymllEe0cCillPKIFg6llFIe0cKhlFLKI1o4lFJKeUQLh1JKKY9o4VBKKeURMabkXewmIkeBfXbnyCEGOGZ3iIvw94z+ng/8P6O/5wP/z+jv+eDyMtY0xlS42EolsnD4GxFZa4xpY3eOgvh7Rn/PB/6f0d/zgf9n9Pd84JuMeqhKKaWUR7RwKKWU8ogWDt+YZHeAQvD3jP6eD/w/o7/nA//P6O/5wAcZ9RyHUkopj2iLQymllEe0cBQhEblGRHaISLyI/C2fdW4XkV9FZKuIfOpP+USkhogsEJENIrJZRK7zcb4pInJERLbk87iIyFgr/2YRaeXLfIXMeI+VbbOILBeR5v6UL8d6bUXEJSK3+ipbjn1fNKOI9BCRjdbnZJEv81n7v9jvOUpEvhKRTVbG+3ycr7r1Wd1m7f+RPNbx3ufFGKO3IrgBTmAXUAsIAjYBjXKtUxfYAJSzfq7oZ/kmASOs+42AvT5+D7sBrYAt+Tx+HfAdIEAHYJUNv+eLZeyU4/d7ra8zXixfjv8L84FvgVv98D0sC/wK1LB+9tnnxIOMfwf+a92vABwHgnyYrzLQyrofCezM4/Pstc+LtjiKTjsg3hiz2xiTAUwD+uVaZygw3hhzAsAYc8TP8hmgjHU/Ckj0YT6MMYtxfwDz0w/40LitBMqKSGXfpHO7WEZjzPJzv19gJeDTyesL8R4CjAK+AHz5/++8QmS8G5hljNlvre/znIXIaIBIEREgwlo3yxfZAIwxh4wx6637Z4BtQNVcq3nt86KFo+hUBQ7k+DmBP/8i6wH1RGSZiKwUkWt8lq5w+Z4D7hWRBNzfRkf5JlqhFeY1+JP7cX/j8xsiUhXoD7xtd5YC1APKichCEVknIgPtDpSHcUBD3F+ufgEeMcZk2xFERGKBlsCqXA957fOiU8cWHcljWe4uawG4D1f1wP1NdImINDHGnPRyNihcvruAqcaYV0WkI/CRlc+WD0QeCvMa/IKI9MRdOLrYnSWXN4AnjTEu95dlvxQAtAZ6A6HAChFZaYzZaW+sC/QBNgK9gNrATyKyxBhz2pchRCQCd+txTB779trnRQtH0UkAquf4uRp/PtSTAKw0xmQCe0RkB+5CssZP8t0PXANgjFkhIiG4x72x5ZBGHgrzGmwnIs2AycC1xpgku/Pk0gaYZhWNGOA6EckyxsyxN9YFEoBjxpgUIEVEFgPNcR/H9xf3AS8b98mEeBHZAzQAVvsqgIgE4i4anxhjZuWxitc+L3qoquisAeqKSJyIBAF3AnNzrTMH6AkgIjG4m+S7/Sjfftzf8hCRhkAIcNRH+QpjLjDQ6i3SAThljDlkd6icRKQGMAsY4GffkAEwxsQZY2KNMbHATOAhPysaAF8CXUUkQETCgPa4j+H7k5yflUpAfXz3WcY6t/IesM0Y81o+q3nt86ItjiJijMkSkZHAD7h7rUwxxmwVkReAtcaYudZjV4vIr4ALeMJX30gLme8x4F0R+QvuJu1g6xuVT4jIZ7gP48VY51meBQKt/G/jPu9yHRAPpOL+1udThcj4DBANTLC+1WcZHw6KV4h8trtYRmPMNhH5HtgMZAOTjTEFdi/2dUbgX8BUEfkF9yGhJ40xvhw1tzMwAPhFRDZay/4O1MiR0WufF71yXCmllEf0UJVSSimPaOFQSinlES0cSimlPKKFQymllEe0cCillPKIFg6llFIe0cKhlFLKI1o4VLFizSGxMcctz3lPCrmt5Zf4vORL3acviEhZEXko17JLeq25tnGziIy93O2o4k8vAFTFiogkG2MiSnMGa7gJyW/wSWu01K+NMU2KeL//AnYZY6YW5XZV8aMtDlUiiMjT4p7d8GcR+UxEHheR2JwzuFnLnsvxc7KI/Dfnt3MReU5EHrPuz7GG9d4qIsPy2e+9IrLaav28IyJOa7/bRORd67k/ikhojucMtGZk2yQiH+W3nVz7ObfNCcB6rMHr8sn4MlDb2tb/zr1W699HRWSLdRtTyPe2noj8BIwBnivs81QJ5qsZq/Smt6K44R7ja2OO2x24h+D+BQjDPRFVPPA4EEuOGdysZc/l+DkZ9zwGi3IsyznzXHnr31BgCxB97nnWvw2Br4BA6+cJwEBrv1lAC2v5DOBe635jYAcQc24f+W0n1+uOxT1uU4dcy/+UMffrzvFaz71P4bgnH9oKtLzI+x1svc9NcQ/idwXuSYtC7P6/oDf7bjrIoSpuzhpjWuRcYH0Dnm2MSbV+zj3qb76MMRtEpKKIVME9BegJY808B4wWkf7W/eq4h8DPOShlb9x/jNdYAxqG4h6CfjGwxxhzbvC5dbj/mIN7/oaZxhoQzxhzXETuzmc7ue0z7pnccsor4+/5vNwuuN+nFAARmQV0xT2dcX6uwj3NcCJw2hjzu4ik4R4oU5VSWjhUSZHXybosLjwcG5LPc2cCt+L+Nj0NQER6AFcCHY0xqSKyMI/nC/CBMeapCxa6zzGk51jkwl0Mzj0nd9Y8t5OHlFz7KUzG3PvxVAvcrZTmwGYRqQicOVd8VOmk5zhUSbAY6C8ioSISCdxgLT8MVBSRaBEJBvrm8/xpuOcnuRV3EQH3nOsnrD/IDYAOeTxvHnCr9ccUESkvIjUvknUecLuIRJ97ziVup6CMZ4DIPNZfDNwkImEiEo57Ctkl1j7niXta2dxO456gqBnuYc6fB8YXIpsqwbTFoYqb0BzzDwB8b4z5m4hMx30sfh/WH0NjTKY138gqYA+wPa8NGve8JJHAQfPHRDffA8NFZDPucxK5DxFhjPlVRP4B/CgiDiATeJj8DxWd29eLwCIRcQEbjDGD89nOvou8F3lmNMYkiXte+y3Ad8aYJ6zl60VkKn/MUjfZOlTnAOrgPneR28fAbOBm4ATuIvvWRXKpEk6746oSx+o5lWyMecXuLMWBiDQBhhhjHi1gnU1AL+N/U+EqG2iLQ6lSzrhn1yuoaAQDkVo01Dna4lBKKeURPTmulFLKI1o4lFJKeUQLh1JKKY9o4VBKKeURLRxKKaU8ooVDKaWUR7RwKKWU8ogWDqWUUh75f2I4558g079IAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import cantera as ct \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from scipy.optimize import fsolve\n",
    "import numpy as np\n",
    "phi = np.linspace(0.5,2,16)\n",
    "T_cmplt = np.zeros(phi.shape)\n",
    "\n",
    "for i in range(len(phi)):\n",
    "    def f_flame(T_a) :\n",
    "        if (phi[i] <= 1):\n",
    "            \n",
    "            #kmol\n",
    "            n_o2 = 2\n",
    "            n_ch4 = phi[i]\n",
    "            n_n2 = 7.52\n",
    "            n_co2 = phi[i]\n",
    "            n_h2o = 2 * phi[i]\n",
    "            \n",
    "            #kg/mol \n",
    "            M_o2 = 32         \n",
    "            M_ch4 = 16\n",
    "            M_n2 = 28\n",
    "            M_co2 = 44\n",
    "            M_h2o = 18\n",
    "            \n",
    "            #mass\n",
    "            m_o2 = n_o2 * M_o2\n",
    "            m_ch4 = n_ch4 * M_ch4\n",
    "            m_n2 = n_n2 * M_n2    \n",
    "            m_h2o = n_h2o * M_h2o\n",
    "            m_co2 = n_co2 * M_co2\n",
    "\n",
    "\n",
    "            #total mass\n",
    "            m_total = m_o2 + m_ch4 + m_n2\n",
    "            \n",
    "            #Mass Fraction\n",
    "            y_o2 = m_o2 / m_total\n",
    "            y_ch4 = m_ch4 / m_total\n",
    "            y_n2 = m_n2 / m_total\n",
    "\n",
    "            # Reactant temperature\n",
    "            T_r = 300\n",
    "\n",
    "            #Reactant Enthalpy\n",
    "            h_r = y_ch4 * thermo(\"CH4\", M_ch4).h_mass(T_r) + \\\n",
    "                  y_o2 * thermo(\"O2\", M_o2).h_mass(T_r) + \\\n",
    "                  y_n2 * thermo(\"N2\", M_n2).h_mass(T_r)\n",
    "\n",
    "            #Set product mass fractions\n",
    "\n",
    "            n_o2 = 2*(1-phi[i])\n",
    "            \n",
    "            m_o2 = n_o2 * M_o2\n",
    "\n",
    "            y_h2o = m_h2o / m_total\n",
    "            y_co2 = m_co2 / m_total\n",
    "            y_o2 = m_o2 / m_total\n",
    "            \n",
    "\n",
    "            #product enthalpy\n",
    "            h_p = y_co2 * thermo(\"CO2\", M_co2).h_mass(T_a) + \\\n",
    "                 y_h2o * thermo(\"H2O\", M_h2o).h_mass(T_a) + \\\n",
    "                 y_n2 * thermo(\"N2\", M_n2).h_mass(T_a) + \\\n",
    "                    y_o2 * thermo(\"O2\", M_o2).h_mass(T_a)\n",
    "            \n",
    "        else:\n",
    "            #kmol\n",
    "            n_o2 = 5          \n",
    "            n_ch4 = phi[i]\n",
    "            n_n2 = 7.52\n",
    "            n_co2 = 0.9 * phi[i]\n",
    "            n_h2o = (4 - (1.9 * phi[i]))\n",
    "\n",
    "            #kg/mol\n",
    "            M_o2 = 32         \n",
    "            M_ch4 = 16\n",
    "            M_n2 = 28\n",
    "            M_co2 = 44\n",
    "            M_h2o = 18\n",
    "            M_co = 28\n",
    "            M_h2 = 2\n",
    "\n",
    "            m_o2 = n_o2*M_o2    \n",
    "            m_ch4 = n_ch4*M_ch4\n",
    "            m_n2 = n_n2*M_n2    \n",
    "            m_h2o = n_h2o*M_h2o\n",
    "            m_co2 = n_co2*M_co2\n",
    "\n",
    "            #total mass\n",
    "            m_total = m_o2 + m_ch4 + m_n2\n",
    "\n",
    "            y_o2 = m_o2 / m_total\n",
    "            y_ch4 = m_ch4 / m_total\n",
    "            y_n2 = m_n2 / m_total\n",
    "\n",
    "            # Reactant temperature\n",
    "            T_r = 300\n",
    "\n",
    "            #Reactant Enthalpy\n",
    "            h_r = y_ch4 * thermo(\"CH4\", M_ch4).h_mass(T_r)+\\\n",
    "            y_n2 * thermo(\"N2\", M_n2).h_mass(T_r)+\\\n",
    "            y_o2 * thermo(\"O2\", M_o2).h_mass(T_r)\n",
    "            \n",
    "           \n",
    "            #Set product mass fractions\n",
    "\n",
    "            n_h20 = 4 - (1.9 * phi[i])\n",
    "            n_co = 0.1 * phi[i]\n",
    "            n_h2 = (3.9 * phi[i]) - 4\n",
    "            \n",
    "            m_co = n_co * M_co\n",
    "            m_h2 = n_h2 * M_h2\n",
    "            m_h2o = n_h2o * M_h2o\n",
    "            \n",
    "            y_co2 = m_co2 / m_total\n",
    "            y_co = m_co / m_total\n",
    "            y_h2 = m_h2 / m_total   \n",
    "            y_h2o = m_h2o / m_total\n",
    "            y_n2 = m_n2 / m_total\n",
    "            \n",
    "\n",
    "            #product enthalpy\n",
    "            h_p = y_co2 * thermo(\"CO2\", M_co2).h_mass(T_a) + \\\n",
    "                 y_co * thermo(\"CO\", M_co).h_mass(T_a) + \\\n",
    "                 y_h2 * thermo(\"H2\", M_h2).h_mass(T_a) + \\\n",
    "                 y_h2o * thermo(\"H2O\", M_h2o).h_mass(T_a) + \\\n",
    "                 y_n2 * thermo(\"N2\", M_n2).h_mass(T_a) \n",
    "                 \n",
    "            \n",
    "        return h_p - h_r\n",
    "\n",
    "    # Initial guess\n",
    "    T = 1900\n",
    "    \n",
    "    # Solve for Ta\n",
    "    T_a = fsolve(f_flame,T)\n",
    "        \n",
    "    # Saving T_a in an array\n",
    "    T_cmplt[i] = T_a\n",
    "\n",
    "\n",
    "# Plot Results\n",
    "plt.plot(phi, T_cmplt, label='complete combustion', lw=2)\n",
    "plt.grid(True)\n",
    "plt.legend(loc=2)\n",
    "plt.xlabel('Equivalence ratio, $\\phi$')\n",
    "plt.ylabel('Temp [K]');\n",
    "#print(T_cmplt)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1(d) = Dependance of T adiabatic on reactants Pressure and Temperature"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "The T_(ad,comp) increases as 𝜙 from 0.5<𝜙<1, with its maximum (T_(ad,comp)= 2358.95 K) at 𝜙=1. As the reaction approaches its stoichiometric ratio of 𝜙=1, there is enough fuel-to-air ratio for complete combustion. As 𝜙>1, the T_(ad,comp) decreases as the reaction moves towards a much more fuel rich state in which there isn’t enough air (oxidizing agent) present to burn all the fuel, hence all the heat is not released due to “unburnt” fuel left in the products, thus causing a decrease in temperature.\n",
    "Since part 1 is the ideal case of complete combustion, there is no dependence of T_(ad,comp) on the pressure. In part 2, as per Le Chatelier’s principle , the equilibrium of a reversible reaction tends to move more towards the products side, hence increasing the temperature. This increases the T_(ad,comp) due to molecules having higher energy and higher intensity, increasing the number of molecular interactions.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2 Thermo Properties NASA\n",
    "\n",
    "For the last section for this part ThermoPropNasa file is used to extract thermodynamic data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Entropy of C3H8: 0.2703132349615917  kJ/mol-K\n",
      "Enthalpy of C3H8: -104.67937027588646  kJ/mol\n",
      "Entropy of O2: 0.20514823368386573  kJ/mol-K\n",
      "Enthalpy of O2: -1.2807206293248882e-08  kJ/mol\n",
      "Entropy of O: 0.16105948903946377  kJ/mol-K\n",
      "Enthalpy of O: 249.17350417568267  kJ/mol\n"
     ]
    }
   ],
   "source": [
    "MC3H8 = 44.0962               \n",
    "t_C3H8 = thermo(\"C3H8\",MC3H8) \n",
    "f_C3H8 = t_C3H8.s_mole(298.15) / 1000\n",
    "g_C3H8 = t_C3H8.h_mole(298.15) / 1000\n",
    "print('Entropy of C3H8:',f_C3H8,' kJ/mol-K')\n",
    "print('Enthalpy of C3H8:',g_C3H8,' kJ/mol')\n",
    "\n",
    "#o2\n",
    "Mo2 = 32.               # kg/kmol\n",
    "t_o2 = thermo(\"O2\",Mo2) # thermo object;\n",
    "k_o2 = t_o2.s_mole(298.15) / 1000\n",
    "l_o2 = t_o2.h_mole(298.15) / 1000\n",
    "print('Entropy of O2:',k_o2,' kJ/mol-K')\n",
    "print('Enthalpy of O2:',l_o2,' kJ/mol')\n",
    "\n",
    "\n",
    "\n",
    "Mo = 16.               \n",
    "t_o = thermo(\"O\",Mo) \n",
    "p_o = t_o.s_mole(298.15) / 1000\n",
    "q_o = t_o.h_mole(298.15) / 1000\n",
    "print('Entropy of O:',p_o,' kJ/mol-K')\n",
    "print('Enthalpy of O:',q_o,' kJ/mol')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Co-efficients for H2 at high temperature: [560812.801, -837.150474, 2.975364532, 0.001252249124, -3.74071619e-07, 5.9366252e-11, -3.6069941e-15, 5339.82441, -2.202774769]\n",
      "Co-efficients for H at high temperature: [60.7877425, -0.1819354417, 2.500211817, -1.226512864e-07, 3.73287633e-11, -5.68774456e-15, 3.410210197e-19, 25474.86398, -0.448191777]\n"
     ]
    }
   ],
   "source": [
    "#1.2.2\n",
    "\n",
    "#for H2\n",
    "Mh2= 2.               # kg/kmol\n",
    "t_h2 = thermo(\"H2\",Mh2) # thermo object;\n",
    "print('\\nCo-efficients for H2 at high temperature:',t_h2.cymalahi())\n",
    "\n",
    "#for H\n",
    "Mh= 1.               # kg/kmol\n",
    "t_h = thermo(\"H\",Mh) # thermo object;\n",
    "print('Co-efficients for H at high temperature:',t_h.cymalahi())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Enthalpy for OH at 2000K:  91.07077190755444  kJ/mol\n",
      "\n",
      "Enthalpy for OH at 2000K:  52.94982496580768  kJ/mol\n"
     ]
    }
   ],
   "source": [
    "\n",
    "Moh= 17.               # kg/kmol\n",
    "t_oh = thermo(\"OH\",Moh) # thermo object;\n",
    "x_oh = t_oh.h_mole(2000) / 1000\n",
    "print('Enthalpy for OH at 2000K: ',x_oh,' kJ/mol')\n",
    "\n",
    "#for H2\n",
    "Mh2= 2.               # kg/kmol\n",
    "t_h2 = thermo(\"H2\",Mh2) # thermo object;\n",
    "x_h2 = t_h2.h_mole(2000) / 1000\n",
    "print('\\nEnthalpy for OH at 2000K: ',x_h2,' kJ/mol')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###  Table\n",
    "\n",
    "| Species | h (kJ/mol) | s (kJ/mol-K) |\n",
    "|---------|------------|--------------|\n",
    "| $C_3H_8$   | -104.67937027588646          | 0.2703132349615917        |\n",
    "| $O_2$     |-1.2807206293248882e-08     | 0.20514823368386573        |\n",
    "| $O$  | 249.17350417568267     | 0.16105948903946377       |\n",
    "\n",
    "\n",
    "\n",
    "The $a_i$ values at 1000K can be tabulated as:\n",
    "\n",
    "| Species  | $a_0$    | $a_1$     | $a_2$ | $a_3$     | $a_4$    | $a_5$     | $a_6$    | $a_7$    | $a_8$     |\n",
    "|----------|----------|-----------|-------|-----------|----------|-----------|----------|----------|-----------|\n",
    "| $H_2$    | 4.08e+04 | -8.01e+02 | 8.21  | -1.27e-02 | 1.75e-05 | -1.20e-08 | 3.37e-12 | 2.68e+03 | -3.04e+01 |\n",
    "| $H$      | 0        | 0         | 2.5   | 0         | 0        | 0         | 0        | 2.55E+04 | -4.47E-01 |\n",
    "\n",
    "The $a_i$ values at 6000K can be tabulated as:  \n",
    "\n",
    "| Species | $a_0$    | $a_1$     | $a_2$    | $a_3$     | $a_4$    | $a_5$     | $a_6$    | $a_7$    | $a_8$     |\n",
    "|---------|----------|-----------|----------|-----------|----------|-----------|----------|----------|-----------|\n",
    "| $H$   | 6.09E+01 | -1.82E-01 | 2.50E+00 | -1.23E-07 | 3.73E-11 | -5.69E-15 | 3.41E-19 | 2.55E+04 | -4.48E-01 |\n",
    "|  $H_2$    | 5.61e+05 | -8.37e+02 | 2.98e+00 | 1.25e-03  | -3.74e-07|  5.94e-11 | -3.61e-15| 5.34e+03 | -2.20e+00 |\n",
    "\n",
    "\n",
    "\n",
    "| Species | h (kJ/mol) |\n",
    "|---------|------------|\n",
    "| $OH$    | 91.071     |\n",
    "| $N_2$   | 56.136     |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Extra question 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Kc At 500K:  3.19760979661 \n",
      "Kc At 1000K:  0.731319235548\n"
     ]
    }
   ],
   "source": [
    "#Bonus\n",
    "#assuming one atmosphere pressure\n",
    "# Get all of the Species objects defined in the GRI 3.0 mechanism\n",
    "# Get all of the Species objects defined in the GRI 3.0 mechanism\n",
    "species = {S.name: S for S in ct.Species.listFromFile('gri30.cti')}\n",
    "\n",
    "# Create an IdealGas object with species representing complete combustion\n",
    "complete_species = [species[S] for S in ('H2','CO','CO2','H2O')]\n",
    "gas1 = ct.Solution(thermo='IdealGas', species=complete_species)\n",
    "\n",
    "phi = [500,1000]\n",
    "#print(phi)\n",
    "T_complete = np.zeros(2)\n",
    "mco= np.zeros(2)\n",
    "mco2=np.zeros(2)\n",
    "mh2=np.zeros(2)\n",
    "mh2o=np.zeros(2)\n",
    "for i in range(len(phi)):\n",
    "    gas1.TPX = phi[i], 101325, 'H2O:1,CO:1'\n",
    "    #\n",
    "    gas1.equilibrate('HP')\n",
    "    T_complete[i] = gas1.T\n",
    "    mco[i]= gas1['CO'].X\n",
    "    mco2[i] = gas1['CO2'].X\n",
    "    mh2[i] = gas1['H2'].X\n",
    "    mh2o[i] = gas1['H2O'].X\n",
    "    #print(dataset_molefrac)\n",
    "    #print(dateset_set_temp)\n",
    "    #print(gas1.P)\n",
    "# Print the final results\n",
    "kc1 = (mco2[0]*mh2[0])/(mco[0]*mh2o[0])\n",
    "kc2 = (mco2[1]*mh2[1])/(mco[1]*mh2o[1])\n",
    "\n",
    "print ('Kc At 500K: ',kc1,'\\nKc At 1000K: ', kc2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Part 2 - Chemical Equilibrium - C2H6 + Air Flames"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the calculations done in Part 1, the assumption of complete combustion was used. This is an idealized case to obtain the T_(ad,comp). Gibbs energy is minimized to obtain a much more realistic T_(ad,comp), this is also used to find the equilibrium composition and the corresponding flame temperature. In part 2, Cantera will be used to do calculations of real cases where one needs to account for species disassociation. Files ‘gri30.cti’ and ‘equilibrate’ will be used to develop codes in python to perform further analyses. In the next three cases, Initial Temperature, Pressure or Equivalence Ratio is changed one at a time while keeping the other two constant (T=300 K, P=1 atm, 𝜙=1). The resulting data and graphs will are presented below for each of the three cases:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 Pressure and Temperature Constant, Equivalence Ratio (phi) varies"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this case, the effect of changing 𝜙 (from 0.6 to 2 using increments of 0.05) on $ T_{ad,comp} $\n",
    " is analyzed. This section is very similar to the analysis done in Part 1, but the difference lies in the usage of Cantera files to take into account the dissociation of species to form other products and the equilibrium of a reversible reaction. Contradictory to part 1, the $ T_{ad,comp} $\n",
    " rises and reaches a maximum at 𝜙=1.05 due to dissociation of species method and then drops afterwards. The $ T_{ad,comp} $\n",
    " value ( $  \\sim  $2294.870058K) obtained is lower than the value (2358.95K) obtained in part 1. The graphs above show this phenomenon and also the necessary dissociated species as was specified in the problem statement. Formation of these species requires energy, lowering the system’s overall internal energy. As internal energy is a function of temperature, this results in a drop of the adiabatic flame temperature. Observing the composition graphs, it can be seen that the composition of ethane is zero almost till 𝜙=1.05, and then increases gradually as there is unused fuel left (fuel rich case). The composition of oxygen is opposite to that of ethane as more oxygen is used in the combustion of the excess fuel. Other species are pretty much constant over the entire period, with carbon monoxide and hydrogen gradually increasing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# SECTION 2.1\n",
    "# Get all of the Species objects defined in the GRI 3.0 mechanism\n",
    "species = {S.name: S for S in ct.Species.listFromFile('gri30.cti')}\n",
    "\n",
    "# Create an IdealGas object with species representing incomplete combustion\n",
    "gas1 = ct.Solution(thermo='IdealGas', species=species.values())\n",
    "\n",
    "phi = np.linspace(0.6, 2, 29)\n",
    "mco2 = np.zeros(phi.shape)\n",
    "mo2 = np.zeros(phi.shape)\n",
    "mco = np.zeros(phi.shape)\n",
    "mh2 = np.zeros(phi.shape)\n",
    "mh2o = np.zeros(phi.shape)\n",
    "mc2h6 = np.zeros(phi.shape)\n",
    "\n",
    "#print(phi)\n",
    "T_complete = np.zeros(phi.shape)\n",
    "\n",
    "for i in range(len(phi)):\n",
    "\n",
    "    gas1.TPX = 300, ct.one_atm, 'C2H6:%5.6f, O2:3.5, N2:13.16' % phi[i]\n",
    "   \n",
    "    gas1.equilibrate('HP')\n",
    "    mco2[i] = gas1['CO2'].X\n",
    "    mo2[i] = gas1['O2'].X\n",
    "    mco[i] = gas1['CO'].X\n",
    "    mh2[i] = gas1['H2'].X\n",
    "    mh2o[i] = gas1['H2O'].X\n",
    "    mc2h6[i]= gas1['C2H6'].X\n",
    "    T_complete[i] = gas1.T\n",
    "\n",
    "\n",
    "    #print(gas1.P)\n",
    "# Print the final results\n",
    "#print (T_complete)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "T_ad = 1701.120559 and equivalence ratio = 0.60\n",
      "T_ad = 1793.665083 and equivalence ratio = 0.65\n",
      "T_ad = 1883.162625 and equivalence ratio = 0.70\n",
      "T_ad = 1969.125352 and equivalence ratio = 0.75\n",
      "T_ad = 2050.552257 and equivalence ratio = 0.80\n",
      "T_ad = 2125.729097 and equivalence ratio = 0.85\n",
      "T_ad = 2192.094955 and equivalence ratio = 0.90\n",
      "T_ad = 2246.140073 and equivalence ratio = 0.95\n",
      "T_ad = 2282.882121 and equivalence ratio = 1.00\n",
      "T_ad = 2294.870058 and equivalence ratio = 1.05\n",
      "T_ad = 2277.626999 and equivalence ratio = 1.10\n",
      "T_ad = 2242.229161 and equivalence ratio = 1.15\n",
      "T_ad = 2201.617097 and equivalence ratio = 1.20\n",
      "T_ad = 2160.433674 and equivalence ratio = 1.25\n",
      "T_ad = 2119.816799 and equivalence ratio = 1.30\n",
      "T_ad = 2080.019769 and equivalence ratio = 1.35\n",
      "T_ad = 2041.072301 and equivalence ratio = 1.40\n",
      "T_ad = 2002.943991 and equivalence ratio = 1.45\n",
      "T_ad = 1965.589516 and equivalence ratio = 1.50\n",
      "T_ad = 1928.962403 and equivalence ratio = 1.55\n",
      "T_ad = 1893.019308 and equivalence ratio = 1.60\n",
      "T_ad = 1857.721136 and equivalence ratio = 1.65\n",
      "T_ad = 1823.033032 and equivalence ratio = 1.70\n",
      "T_ad = 1788.923988 and equivalence ratio = 1.75\n",
      "T_ad = 1755.366347 and equivalence ratio = 1.80\n",
      "T_ad = 1722.335314 and equivalence ratio = 1.85\n",
      "T_ad = 1689.808510 and equivalence ratio = 1.90\n",
      "T_ad = 1657.765596 and equivalence ratio = 1.95\n",
      "T_ad = 1626.187939 and equivalence ratio = 2.00\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 792x432 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib notebook\n",
    "%matplotlib inline\n",
    "import cantera as ct \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "species = {S.name: S for S in ct.Species.listFromFile('gri30.cti')}\n",
    "incomplete_species = [species[S] for S in ('C2H6','O2','CO2','H2O','CO','H2','N2')]\n",
    "gas2 = ct.Solution(thermo='IdealGas', species=incomplete_species)\n",
    "phi = np.linspace(0.6, 2, 29)        # Equivalence Ratio values of interest\n",
    "T_incomplete = np.zeros(phi.shape)  # Equilibrium composition counters\n",
    "eqsolCO2=np.zeros(phi.shape)\n",
    "eqsolCO=np.zeros(phi.shape)\n",
    "eqsolH2O=np.zeros(phi.shape)\n",
    "eqsolH2=np.zeros(phi.shape)\n",
    "eqsolC2H6=np.zeros(phi.shape)\n",
    "eqsolO2=np.zeros(phi.shape)\n",
    "\n",
    "for i in range(len(phi)):\n",
    "    gas2.TPX = 300, ct.one_atm,'C2H6:%5.6f, O2:3.5, N2:13.16' %phi[i]   # Evaluating the gas at different values of Eq. ratios\n",
    "    gas2.equilibrate('HP')       # We assume Adiabatic constant pressure process \n",
    "    T_incomplete[i] = gas2.T     # Storing T_ad values\n",
    "    print('T_ad = %5.6f and equivalence ratio = %1.2f' %(gas2.T, phi[i])) # Printing T_ad to study the trend \n",
    "    eqsolCO2[i]=gas2['CO2'].X\n",
    "    eqsolCO[i]=gas2['CO'].X\n",
    "    eqsolH2O[i]=gas2['H2O'].X\n",
    "    eqsolH2[i]=gas2['H2'].X\n",
    "    eqsolC2H6[i]=gas2['C2H6'].X\n",
    "    eqsolO2[i]=gas2['O2'].X\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(11, 6))     # Plotting Graph for the Adiabtic temperature vs Eq. ratio\n",
    "axes[0].plot(phi, T_incomplete, label='incomplete combustion', lw=2)\n",
    "axes[0].grid(True)\n",
    "axes[0].legend(loc=1)\n",
    "axes[0].set_xlabel('Equivalence Ratio $\\phi$')\n",
    "axes[0].set_ylabel('Adiabatic Temperature [K]');\n",
    "axes[0].set_title('Equivalence ratio vs Adiabatic Temperature');\n",
    "\n",
    "axes[1].plot(phi, eqsolCO2, label=\"CO2\")            # Plotting Graph for the Equilibrium concentration vs. Eq. Ratio\n",
    "axes[1].plot(phi, eqsolCO, label=\"CO\")\n",
    "axes[1].plot(phi, eqsolH2O, label=\"H2O\")\n",
    "axes[1].plot(phi, eqsolC2H6, label=\"C2H6\")\n",
    "axes[1].plot(phi, eqsolH2, label=\"H2\")\n",
    "axes[1].plot(phi, eqsolO2, label=\"O2\")\n",
    "axes[1].grid(True)\n",
    "axes[1].legend(loc=2); # upper left corner\n",
    "axes[1].set_xlabel('Equilibrium composition')\n",
    "axes[1].set_ylabel('Adiabatic Temperature [K]')\n",
    "axes[1].set_title('Equivalence ratio vs Equilibrium compostion');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 Temperature and equivalency ratio (phi) constant, Pressure varies"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this case, the dependence of adiabatic flame temperature on pressure is analyzed by increasing pressure from 1 atm to 36 atm in intervals of 5 atm, while maintaining the temperature (at 300 K) and 𝜙 (at 1) respectively. As can be seen from previous part, an increase in pressure results in higher adiabatic flame temperatures. The rise is very steep in the beginning and then flattens out as it reaches its maximum value. According to Le Chatelier’s principle, an increase in pressure would result in the system moving towards the direction of lesser number of moles; i.e. towards the products in this case. As the forward reaction is exothermic , an increase in pressure pushes the system towards the exothermic side, resulting in an increase in the adiabatic flame temperature. The maximum flame temperature in this case is about 2341.962734 K, which is higher than Case 1, but still lower than the idealistic stoichiometric case. Observing the composition graph shows that with an increase in pressure, the amount of ethane increases very gradually. A probable reason is due to an increase chances of collisions within other species, thus the probability of fuel reacting slightly decreases. The composition of all the other species more or less stays constant throughout the entire cycle."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 2259.59817046  2299.68574975  2310.68756837  2316.87336765  2321.07894794\n",
      "  2324.21949738  2326.70123424  2328.73829805]\n"
     ]
    }
   ],
   "source": [
    "#SECTION 2.2\n",
    "\n",
    "#Varying Pressure, phi=1\n",
    "\n",
    "# Get all of the Species objects defined in the GRI 3.0 mechanism\n",
    "species = {S.name: S for S in ct.Species.listFromFile('gri30.cti')}\n",
    "\n",
    "# Create an IdealGas object with species representing incomplete combustion\n",
    "gas1 = ct.Solution(thermo='IdealGas', species=species.values())\n",
    "\n",
    "pressureArr = np.linspace(101325, 3647700, 8)\n",
    "mco2 = np.zeros(pressureArr.shape)\n",
    "mo2 = np.zeros(pressureArr.shape)\n",
    "mco = np.zeros(pressureArr.shape)\n",
    "mh2 = np.zeros(pressureArr.shape)\n",
    "mh2o = np.zeros(pressureArr.shape)\n",
    "mc2h6 = np.zeros(pressureArr.shape)\n",
    "\n",
    "T_complete = np.zeros(pressureArr.shape)\n",
    "\n",
    "\n",
    "\n",
    "for i in range(len(pressureArr)):\n",
    "    #\n",
    "    gas1.TPX = 300, pressureArr[i], 'C2H6:1, O2:3.5, N2:13.16'\n",
    "    #\n",
    "    gas1.equilibrate('HP')\n",
    "    mco2[i] = gas1['CO2'].X[0]\n",
    "    mo2[i] = gas1['O2'].X[0]\n",
    "    mco[i] = gas1['CO'].X[0]\n",
    "    mh2[i] = gas1['H2'].X[0]\n",
    "    mh2o[i] = gas1['H2O'].X[0]\n",
    "    mc2h6[i]= gas1['C2H6'].X[0]\n",
    "    T_complete[i] = gas1.T\n",
    "    #print(gas1.P)\n",
    "# Print the final results\n",
    "#print(moleRatio)\n",
    "print (T_complete)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "T_ad = 2282.882121 K and Pressure = 101325.00 Pa\n",
      "T_ad = 2317.508349 K and Pressure = 607950.00 Pa\n",
      "T_ad = 2326.855771 K and Pressure = 1114575.00 Pa\n",
      "T_ad = 2332.068962 K and Pressure = 1621200.00 Pa\n",
      "T_ad = 2335.593001 K and Pressure = 2127825.00 Pa\n",
      "T_ad = 2338.212761 K and Pressure = 2634450.00 Pa\n",
      "T_ad = 2340.275231 K and Pressure = 3141075.00 Pa\n",
      "T_ad = 2341.962734 K and Pressure = 3647700.00 Pa\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"\" width=\"1100\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib notebook\n",
    "import cantera as ct \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "species = {S.name: S for S in ct.Species.listFromFile('gri30.cti')}\n",
    "incomplete_species = [species[S] for S in ('C2H6','O2','CO2','H2O','CO','H2','N2')]\n",
    "gas2 = ct.Solution(thermo='IdealGas', species=incomplete_species)\n",
    "P_sampling = np.linspace(101325, 3647700, 8)   # Pressure values that we will be our points of interest here\n",
    "T_incomplete = np.zeros(P_sampling.shape)      # Adiabatic Temperature values will be stored in this\n",
    "P = np.zeros(P_sampling.shape)                 # Pressure values in bar\n",
    "eqsolCO2=np.zeros(P_sampling.shape)            # Equilbrium concentrations will be stored in this array        \n",
    "eqsolCO=np.zeros(P_sampling.shape)\n",
    "eqsolH2O=np.zeros(P_sampling.shape)\n",
    "eqsolH2=np.zeros(P_sampling.shape)\n",
    "eqsolC2H6=np.zeros(P_sampling.shape)\n",
    "eqsolO2=np.zeros(P_sampling.shape)\n",
    "for i in range(len(P_sampling)):\n",
    "    gas2.TPX = 300, P_sampling[i],'C2H6:1, O2:3.5, N2:13.16'     # Initializing gas that needs to be studied\n",
    "    P[i] = P_sampling[i]/1e5         # Storing Pressure values at each iteration in bar\n",
    "    gas2.equilibrate('HP')\n",
    "    T_incomplete[i] = gas2.T\n",
    "    print('T_ad = %5.6f K and Pressure = %1.2f Pa' %(gas2.T, P_sampling[i])) # Displaying the varying Pressure values and T_ad\n",
    "    eqsolCO2[i]=gas2['CO2'].X               # Storing the equilibrium concentration at each iteration\n",
    "    eqsolCO[i]=gas2['CO'].X\n",
    "    eqsolH2O[i]=gas2['H2O'].X\n",
    "    eqsolH2[i]=gas2['H2'].X\n",
    "    eqsolC2H6[i]=gas2['C2H6'].X\n",
    "    eqsolO2[i]=gas2['O2'].X\n",
    "\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(11, 6))    # Displaying the graphs\n",
    "axes[0].plot(P, T_incomplete, label='incomplete combustion', lw=2)\n",
    "axes[0].grid(True)\n",
    "axes[0].legend(loc=1)\n",
    "axes[0].set_xlabel('Pressure [bar]')\n",
    "axes[0].set_ylabel('Adiabatic Temperature [K]');\n",
    "axes[0].set_title('Pressure vs Adiabatic Temperature');\n",
    "\n",
    "axes[1].plot(P, eqsolCO2, label=\"CO2\")\n",
    "axes[1].plot(P, eqsolCO, label=\"CO\")\n",
    "axes[1].plot(P, eqsolH2O, label=\"H2O\")\n",
    "axes[1].plot(P, eqsolC2H6, label=\"C2H6\")\n",
    "axes[1].plot(P, eqsolH2, label=\"H2\")\n",
    "axes[1].plot(P, eqsolO2, label=\"O2\")\n",
    "axes[1].grid(True)\n",
    "axes[1].legend(loc=2); # upper left corner\n",
    "axes[1].set_xlabel('Equilibrium composition')\n",
    "axes[1].set_ylabel('Pressure [bar]')\n",
    "axes[1].set_title('Pressure vs. Equilibrium composition');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 Equivalence Ratio (phi) and Pressure constant , Temperature varies"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The last final case shows the effect of initial temperature of the reaction on the adiabatic flame temperature. The initial temperature is increased from 300 K to 900 K with 100 K increments, while keeping 𝜙 (constant at 1) and pressure (constant at 1 atm). According to the graphs, it can be seen that an increase in initial reaction temperature results in an increase in the adiabatic flame temperature, in accordance with Le Chatelier’s principle which states that the reversible system is exothermic in the forward direction and an increased temperature results in the system shifting towards the products to maintain overall equilibrium. The relationship between initial and flame temperature is also seen to be positively linear, increasing till it reaches a highest maximum value of 2585.320303 K. From the composition graph it can be seen that with an increase in initial temperature, the amount of ethane increases very gradually. This could be due to an increase in number of chances of collisions within other species, thus the probability of fuel reacting slightly decreases. The composition of all the other species stays constant more or less throughout the entire cycle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [],
   "source": [
    "#SECTION 2.3\n",
    "\n",
    "#Varying Temperature, phi=1\n",
    "\n",
    "# Get all of the Species objects defined in the GRI 3.0 mechanism\n",
    "species = {S.name: S for S in ct.Species.listFromFile('gri30.cti')}\n",
    "\n",
    "# Create an IdealGas object with species representing incomplete combustion\n",
    "gas1 = ct.Solution(thermo='IdealGas', species=species.values())\n",
    "\n",
    "tempArr = np.linspace(300, 900, 7)\n",
    "mco2 = np.zeros(tempArr.shape)\n",
    "mo2 = np.zeros(tempArr.shape)\n",
    "mco = np.zeros(tempArr.shape)\n",
    "mh2 = np.zeros(tempArr.shape)\n",
    "mh2o = np.zeros(tempArr.shape)\n",
    "mc2h6 = np.zeros(tempArr.shape)\n",
    "T_complete = np.zeros(tempArr.shape)\n",
    "\n",
    "\n",
    "\n",
    "for i in range(len(tempArr)):\n",
    "    #gas1.TPX = 300, ct.one_atm, 'CH4:%5.6f, O2:2, N2:7.52' % phi[i]\n",
    "    # The next function does not exist in Cantera 2.2.1.  \n",
    "    # We need to define a function that will calculate the equivalence and pass the mol fraction to\n",
    "    # gas1. \n",
    "    #    gas1.set_equivalence_ratio(phi[i], 'CH4', 'O2:1, N2:3.76')\n",
    "    # The composition can be set in terms of either mole fractions (X) or mass fractions (Y):\n",
    "    # gas1.X = 'CH4:1, O2:2, N2:7.52'\n",
    "    # gas1.X = 'CH4:%5.6f, O2:2, N2:7.52' % phi[i]\n",
    "    # gas1.TP = 300, ct.one_atm\n",
    "    gas1.TPX = tempArr[i], ct.one_atm, 'C2H6:1, O2:3.5, N2:13.16'\n",
    "    #\n",
    "    gas1.equilibrate('HP')\n",
    "    mco2[i] = gas1['CO2'].X\n",
    "    mo2[i] = gas1['O2'].X\n",
    "    mco[i] = gas1['CO'].X\n",
    "    mh2[i] = gas1['H2'].X\n",
    "    mh2o[i] = gas1['H2O'].X\n",
    "    mc2h6[i]= gas1['C2H6'].X\n",
    "    T_complete[i] = gas1.T\n",
    "    \n",
    "    #print(gas1.P)\n",
    "# Print the final results\n",
    "#print (T_complete)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "T_ad = 2282.882121 K and Initial Temperature = 300.00 Pa\n",
      "T_ad = 2333.677146 K and Initial Temperature = 400.00 Pa\n",
      "T_ad = 2384.190225 K and Initial Temperature = 500.00 Pa\n",
      "T_ad = 2434.550135 K and Initial Temperature = 600.00 Pa\n",
      "T_ad = 2484.832724 K and Initial Temperature = 700.00 Pa\n",
      "T_ad = 2535.081167 K and Initial Temperature = 800.00 Pa\n",
      "T_ad = 2585.320303 K and Initial Temperature = 900.00 Pa\n"
     ]
    },
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support.' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"\" width=\"1100\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib notebook\n",
    "import cantera as ct \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "species = {S.name: S for S in ct.Species.listFromFile('gri30.cti')}\n",
    "incomplete_species = [species[S] for S in ('C2H6','O2','CO2','H2O','CO','H2','N2')]\n",
    "gas2 = ct.Solution(thermo='IdealGas', species=incomplete_species)\n",
    "T_sampling = np.linspace(300, 900, 7)       # Intiial temperature values at which reaction will be studied at\n",
    "T_incomplete = np.zeros(T_sampling.shape)   # Array to store adiabtic Flame temperature values           \n",
    "eqsolCO2=np.zeros(T_sampling.shape)         # Arrays to store equilibrium compostion of species \n",
    "eqsolCO=np.zeros(T_sampling.shape)\n",
    "eqsolH2O=np.zeros(T_sampling.shape)\n",
    "eqsolH2=np.zeros(T_sampling.shape)\n",
    "eqsolC2H6=np.zeros(T_sampling.shape)\n",
    "eqsolO2=np.zeros(T_sampling.shape)\n",
    "for i in range(len(T_sampling)):\n",
    "    gas2.TPX = T_sampling[i], ct.one_atm ,'C2H6:1, O2:3.5, N2:13.16'   # Initializing a gas with varying T_ini values\n",
    "    gas2.equilibrate('HP')\n",
    "    T_incomplete[i] = gas2.T      # Storing Calculated Adiabatic flame temperature values at each iteration\n",
    "    print('T_ad = %5.6f K and Initial Temperature = %1.2f Pa' %(gas2.T, T_sampling[i])) # Printing T_ad values\n",
    "    eqsolCO2[i]=gas2['CO2'].X       # Storing the equilibrium concentration values at each iteration\n",
    "    eqsolCO[i]=gas2['CO'].X\n",
    "    eqsolH2O[i]=gas2['H2O'].X\n",
    "    eqsolH2[i]=gas2['H2'].X\n",
    "    eqsolC2H6[i]=gas2['C2H6'].X\n",
    "    eqsolO2[i]=gas2['O2'].X\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(11, 6))    # Plotting the graphs\n",
    "axes[0].plot(T_sampling, T_incomplete, label='incomplete combustion', lw=2)\n",
    "axes[0].grid(True)\n",
    "axes[0].legend(loc=1)\n",
    "axes[0].set_xlabel('Initial Temperature [K]')\n",
    "axes[0].set_ylabel('Adiabatic Temperature [K]');\n",
    "axes[0].set_title('Initial Temperature vs Adiabatic Temperature');\n",
    "\n",
    "axes[1].plot(T_sampling, eqsolCO2, label=\"CO2\")\n",
    "axes[1].plot(T_sampling, eqsolCO, label=\"CO\")\n",
    "axes[1].plot(T_sampling, eqsolH2O, label=\"H2O\")\n",
    "axes[1].plot(T_sampling, eqsolC2H6, label=\"C2H6\")\n",
    "axes[1].plot(T_sampling, eqsolH2, label=\"H2\")\n",
    "axes[1].plot(T_sampling, eqsolO2, label=\"O2\")\n",
    "axes[1].grid(True)\n",
    "axes[1].legend(loc=2); # upper left corner\n",
    "axes[1].set_xlabel('Equilibrium composition')\n",
    "axes[1].set_ylabel('Initial Temperature [K]')\n",
    "axes[1].set_title('Initial Temperature vs Equilibrium composition');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In summary it can be seen that the adiabatic flame temperature does depends on pressure, equivalence ratio, and initial temperature of the reaction. Comparing the results obtained in part 2 with part 1, it can be formalized that the maximum adiabatic flame temperature in part 2 is lower than the one obtained in part 1, except for the case where the initial temperature is varied. The Cantera results is much more accurate as it takes into account the formation of other disassociated species as well as its effect on the overall position of the system’s equilibrium. In the next section, we will be studying the cases of fuel dilution and fuel enrichment by adding components to the fuel mixture."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Part 3 - Chemical Equilibrium - Exhaust Gas Recirculation (EGR)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1 Exhaust Gas recirculation with Carbon Dioxide and Nitrogen"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this section, the inlet mixture is diluted with Carbon Dioxide and Nitrogen. This is done to control the adiabatic flame temperature. The amount of NOx and CO produced in each case is observed so that equilibrium composition is quantified. The hypothesis is such that diluting the methane-air composition with a ‘Diluting’ agent will reduce the resultant adiabatic flame temperature. The production of NOx and CO in the system will also increase as Nitrogen and Carbon radicals would react with air at very high temperatures.\n",
    "In the two cases discussed below, the φ, initial temperature and pressure were kept constant at 0.75, 850k and 35 atm respectively. The mole fraction of the diluting agent was then varied from 0 to 0.95 with 0.05 increments. In order to get the number of moles of the diluting agent in an idealized stoichiometric combustion of methane, the following equation was used:\n",
    "\n",
    "$$\\mathrm{\\ CH_4 + 2(O_2 + 3.76 N_2) +x(diluting agent)\\rightarrow CO_2 + 2 H_2O + 7.52 N_2 + minor\\ species}$$\n",
    "\n",
    "Therefore the mole fraction of the diluting agent would be:\n",
    "\n",
    "$ X_{Diluting~Agent}=\\frac{x}{1+2+7.32+x}=\\frac{x}{10.32+x} $\n",
    "\n",
    "\n",
    "$ x=\\frac{10.32*X_{Diluting~Agent}}{1-X_{Diluting~Agent}} $\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dataset_molefrac[0.07212128763976883, 0.11877049591765526, 0.16552000852476, 0.212244522156042, 0.25889975005126253, 0.30548008632157403, 0.35199557010540694, 0.3984594834598943, 0.44488307401986704, 0.4912741984699449, 0.5376377336462217, 0.583976341804181, 0.6302914280508587, 0.6765836205416752, 0.7228532209671333, 0.7691003409537503, 0.8153250362004004, 0.8615273333357549, 0.9077072499227425, 0.9538648006633671]\n",
      "[2344.53888334 2243.44192077 2146.731125   2053.4494497  1963.20457638\n",
      " 1875.85251083 1791.33393756 1709.5981127  1630.57475312 1554.16966797\n",
      " 1480.26959545 1408.74914934 1339.47630009 1272.31651709 1207.13511726\n",
      " 1143.79879072 1082.17630933 1022.13888084  963.54379888  906.20719832]\n",
      "\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import cantera as ct \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Get all of the Species objects defined in the GRI 3.0 mechanism\n",
    "# Get all of the Species objects defined in the GRI 3.0 mechanism\n",
    "species = {S.name: S for S in ct.Species.listFromFile('gri30.cti')}\n",
    "\n",
    "# Create an IdealGas object with species representing complete combustion\n",
    "complete_species = [species[S] for S in ('CH4','O2','N2','CO2','H2O','NO','NO2','CO')]\n",
    "gas1 = ct.Solution(thermo='IdealGas', species=complete_species)\n",
    "\n",
    "phi = np.linspace(0, 0.95, 20)\n",
    "#print(phi)\n",
    "T_complete = np.zeros(phi.shape)\n",
    "dataset_molefrac = []\n",
    "mco= np.zeros(phi.shape)\n",
    "mno2=np.zeros(phi.shape)\n",
    "mno=np.zeros(phi.shape)\n",
    "for i in range(len(phi)):\n",
    "    var1 = (10.32*phi[i])/(1-phi[i])\n",
    "    gas1.TPX = 850, 101325*35, 'CH4:0.75, O2:2, N2:7.52, CO2:%5.6f' % var1\n",
    "    #\n",
    "    gas1.equilibrate('HP')\n",
    "    T_complete[i] = gas1.T\n",
    "    mco[i]= gas1['CO'].X\n",
    "    mno2[i] = gas1['NO2'].X\n",
    "    mno[i] = gas1['NO'].X\n",
    "    \n",
    "    dataset_molefrac.append(gas1.X[3])\n",
    "print(\"dataset_molefrac\" + str(dataset_molefrac))\n",
    "    #print(dataset_molefrac)\n",
    "    #print(dateset_set_temp)\n",
    "    #print(gas1.P)\n",
    "# Print the final results\n",
    "print (T_complete)\n",
    "\n",
    "plt.plot( dataset_molefrac, T_complete, label='Tad vs Mole Fraction of CO2', lw=2)\n",
    "\n",
    "#plt.plot(phi, T_Diff, label='T Diff', lw=2)\n",
    "plt.grid(True)\n",
    "plt.legend(loc=1)\n",
    "plt.xlabel('Mole Fraction of Co2')\n",
    "plt.ylabel('Adiabatic Flame Temperature [K]');\n",
    "print()\n",
    "\n",
    "fig4 = plt.figure()\n",
    "ax4 = fig4.add_subplot(111)\n",
    "ax4.plot(dataset_molefrac, mco, label='CO', lw=2)\n",
    "ax4.plot(dataset_molefrac, mno, label='NO', lw=2)\n",
    "ax4.plot(dataset_molefrac, mno2, label='NO2', lw=2)\n",
    "ax4.set_yscale('log')\n",
    "plt.xlabel('Mole Fraction of Co2')\n",
    "plt.ylabel('Mole Fraction')\n",
    "ax4.grid(True)\n",
    "ax4.legend(loc=1)\n",
    "print()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It can be seen from the graphs and data obtained from the experiments that the addition of a diluting agent decreases the adiabatic flame temperature. In both cases of carbon dioxide and nitrogen, the adiabatic flame temperature is greater than 2200 K when mole fraction of the diluting agent is zero, which is close to the value obtained in part 1 of the experiment during an idealized combustion of methane. As the mole fraction of the diluting agent is increased, the adiabatic flame temperature drops steeply until it reaches a value of just above 400 K. The flame temperature drops because the heat is now evenly distributed amongst the reactants, which now has an extra species; i.e. the diluting agent. This decreases the average kinetic energy of the particles, this reducing the adiabatic flame temperature. Furthermore, an increase in the diluting agent would also inhibit the combustion of methane, this less fuel is burnt and less heat is released in this exothermic combustion process.\n",
    "If the dilution level is increased to 100%, mathematically the x (number of moles of diluting agent) will go infinity. Theoretically, this will inhibit the forward movement of the reaction; i.e. reactants to products. The estimation of the adiabatic flame temperature in that case would be close to initial temperature, a value of roughly 298 K.\n",
    "Upon comparison between the two cases of dilution, the slope of the drop in the adiabatic temperature is higher in the case of carbon dioxide than nitrogen. This is because the triple bonds of the nitrogen gas are much stronger than that of the single C-O bond, thus it has a higher enthalpy and requires a higher temperature to break the bond. The start and finish temperatures, ~2200 K and ~400 K respectively, in both cases are roughly the same. The equilibrium composition of NOx and CO species is also roughly the same in both cases. \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Extra question 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dataset_molefrac[0.0721212876397693, 0.06865644832110271, 0.06516074622386073, 0.06163628450265726, 0.05808561715453476, 0.05451172718476905, 0.0509178997990834, 0.04730760544607816, 0.04368434744742172, 0.04005149331734022, 0.036412108383574136, 0.03276882655332452, 0.029123746925232345, 0.025478410971759586, 0.021833831699602232, 0.018190593411425218, 0.014548977567940661, 0.010909091673621469, 0.0072709649664023214, 0.0036346014475849803]\n",
      "[2344.53888334 2307.63839003 2268.44788724 2226.78769777 2182.46216323\n",
      " 2135.25799092 2084.94130959 2031.25474834 1973.91395669 1912.60373715\n",
      " 1846.9740179  1776.63630792 1701.16062868 1620.07439373 1532.86360657\n",
      " 1438.97828545 1337.8435817  1228.87970841 1111.53524521  985.3415383 ]\n",
      "\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEKCAYAAAAFJbKyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xd4VNXWwOHfSiN0AoHQe5MSWoBIDYKIKKCiFBUQC6KgIvZyP+u91mvFKyAiigqCVBXkAhKKSO8QhNBDr6FLEtb3xxy4EZLJJGQyKet9nvNkZp+2dtqas/c5e4uqYowxxnjKz9cBGGOMyVkscRhjjEkXSxzGGGPSxRKHMcaYdLHEYYwxJl0scRhjjEkXSxzGGGPSxRKHMcaYdPFa4hCRCiIyT0RiRGSjiDxxxfqnRURFJNR5LyLyiYjEisg6EWmcbNt+IrLVWfp5K2ZjjDFpC/DisROBp1R1lYgUBlaKyGxV3SQiFYAbgd3Jtr8ZqOEszYHPgeYiUhx4BYgA1DnOdFU9ntqJQ0NDtXLlyhkO/MyZMxQsWDDD++d0Vn+rv9U/b9Z/5cqVR1S1ZFrbeS1xqOp+YL/z+pSIxADlgE3Ah8CzwLRku3QDvlHXGChLRKSYiJQBooDZqnoMQERmA52Acamdu3LlyqxYsSLDsUdHRxMVFZXh/XM6q7/V3+of5eswfEJEdnmynTevOC4TkcpAI2CpiHQF9qrqWhFJvlk5YE+y93FOWWrlV55jADAAICwsjOjo6AzHe/r06WvaP6ez+lv9rf7Rvg4jW/N64hCRQsAkYAiu5quXgI4pbZpCmbop/3uB6khgJEBERIReyyeGvPyJA6z+Vn+rf16uvye8eleViATiShrfqepkoBpQBVgrIjuB8sAqESmN60qiQrLdywP73JQbY4zxAa9dcYirHepLIEZVPwBQ1fVAqWTb7AQiVPWIiEwHBovIeFyd4/Gqul9EZgH/EpEQZ7eOwAveituYzJaQkEBcXBznz5/3dSgeKVq0KDExMb4Ow2fyQv2Dg4MpX748gYGBGdrfm01VLYE+wHoRWeOUvaiqM1LZfgbQGYgFzgL9AVT1mIi8ASx3tnv9Uke5MTlBXFwchQsXpnLlylzRr5ctnTp1isKFC/s6DJ/J7fVXVY4ePUpcXBxVqlTJ0DG8eVfVIlLun0i+TeVkrxUYlMp2o4HRmRmfMVnl/PnzOSZpmNxPRChRogSHDx/O8DHsyfEr2IyIxhssaZjs5Fp/Hy1xJLPzyBnavDePCX9eYF3cCUsixhiTAkscyczedJA9x84xY0cCXYf9Tpv35vH2zM1s2BtvScTkWEePHqVhw4Y0bNiQ0qVLU65cucvvL1y4kOb+o0aNYsiQIZkWT2xsLCLCa6+9drns4MGDBAQEpHmel19+mY8++sjjc40aNYqSJUterm///v0zHPclFy9e5O233778PikpidatW1/zcd3ZtGkTDRo0oFGjRuzcufOq9cuXL0dEmDt3rlfjuMQSRzL3t6rCDwMiaV8xgJKF87Hn2DmGz9/GrZ8uIur9aN751ZKIyXlKlCjBmjVrWLNmDQMHDuTJJ5+8/D4oKMgnMVWvXp3p06dffj9hwgTq1avnlXPdc889l+v71VdfXbU+MTExXce7MnH4+/uzcOHCa47TncmTJ3PnnXeyevVqUhpOady4cbRq1Ypx41IeUENVuXjxYqbFY4kjGX8/oXnVEvSpk48lL7Rn/IBI+kRWIrRQELuOnuXzaFcSafd+NO/N2szGfZZETM7WpUsXmjRpQt26dRk1atTl8lGjRlGzZk2ioqJYsmTJVfslJSVRqVIlTp48Cbj+MVWtWpUjR44wfvx46tWrR4MGDWjXrl2K5y1YsCDVqlVjzRrXDZcTJkzgrrvuurx+x44dtGvXjvDwcG688Ubi4uKuOsbWrVu56aabaNKkCW3atGHLli0e17tVq1a89NJLtGnThmHDhjFt2jSaN29Oo0aN6NatG4cOHQJcd1j169eP+vXrEx4eztSpU3n++ec5deoUDRs2pG/fviQmJlKsWDHAlVSGDh1KvXr1qF+/Pj/++CMAc+bMoX379txxxx3UqlWLvn37phjXqlWraN68OeHh4XTv3p34+HimT5/OsGHDGD58OB06dLhqn4sXLzJp0iS+/vprZs6cefkqMjY2lnr16jFw4EAaN27M/v37Pf7+pCVLhhzJifz9hMiqJYisWoJXu9Zl2Y5j/LJ+H79uOMDOo2f5bN42Ppu3jSqhBbmlfhluCS9D7dKFrRPUuFX5+V+8ctydb9+Sof2+/vprihcvztmzZ4mIiKB79+4cPHiQN954g1WrVlG4cGHatGlDZGTk3/bz9/fn1ltvZdq0afTp04fFixdTs2ZNQkNDee2114iOjiYsLIwTJ06keu5evXoxfvx4ihUrRoECBQgLC7t8p8+jjz7Kgw8+yD333MPIkSMZMmTI5X/ClwwYMIBRo0ZRrVo1fv/9dwYPHsx///vfq87z3XffXR5CZOjQoZf/aZ88eZIFCxYAcPz4cbp27YqI8NFHH/Hvf/+bd955h1dffZWSJUuyfv16VJUTJ05w6623MmrUqMtJL/kVy8SJE9m0aRNr167l8OHDNG3alDZt2gCupLBp0yZKlSpFZGQkS5Ysuer7eu+99zJy5EhatWrFiy++yBtvvMH777/PsmXLCA0NTbEpb8GCBdSuXZuqVavSsmVLfv31V7p27Qq4mri++uorhg8fnurPISMscXjA30+4vloJrq9Wgle7XEoi+/l1wwF2HDnDsHmxDJsXS9XQgtwSXoauDcpSIyz33gduco8PP/zwcpNRXFwc27ZtIyYmhvbt21OiRAkAevTowe7du6/at2fPnrz77rv06dOH8ePH07NnTwBatmxJ3759ueuuu7jjjjtSPXfnzp15/fXXKVasGD179vxbU8rSpUv5+eefAejbty//+Mc//rbviRMnWLJkCd27d79cllqT0z333JNiv0ivXr0uv969ezc9evTgwIEDnDt3jtq1awOuK4WpU6cCrjuRQkJC3DZtLVq0iLvvvht/f39Kly5Nq1atWLFiBUFBQURGRlKmTBkAGjZsyM6dO/+WOI4ePcr58+dp1aoVAP369aNPnz6pnuuScePGXa5Lr169GDdu3OXEUa1aNZo2bZrmMdLLEkc6Bfj70aJ6KC2qh/Ja17os3XGMn9ftZ9bGA2w/coZPf4vl099iqVOmCLc1KkvXBuUoXTTY12GbbCKjVwbeMGfOHBYsWMCSJUvInz8/rVq1uvx0uydXzq1bt+a+++7j6NGjTJ8+nTfeeAOAL7744vI//gYNGrBu3TpCQkKu2j84OJjw8HA+/vhjYmJirrqicEdVCQ0NvfypPyOSD50+aNAgXnzxRTp37sz06dP55JNPLp8nPa0I7pqu8+XLd/m1v7//VQkoI83eCQkJTJkyhRkzZvDaa69x8eJFTpw4wZkzZwC8Njy89XFcgwB/P1pWD+WtO+qz7MX2fPtAc3pGVKBIcACb9p/kXzM2c/3bc+k9cgk/LN9N/LkEX4dszGXx8fEUL16c/Pnzs3HjRpYvdw3O0LRpU+bOncuxY8e4cOFCqv/QRYRu3boxZMgQGjRocLmdf/v27URGRvLGG28QEhLC3r17U43hmWee4d1337287yWRkZFMmDABgG+//fZyc88lISEhlClThilTpgCudv61a9dm7BuB63tRrlw5VJXvv//+cnnHjh0ZNmwY4PrHfvz4cQICXJ+3U7ryaNOmDePHjycpKYmDBw/y+++/ExER4VEMoaGh5M+fn8WLFwMwduxY2rZt63af//73vzRt2pQ9e/awc+dOdu/eTZcuXf5244E3WOLIJAH+frSqEco7d4az/OUODL+3CTfXK02gvx9/bD/Kc5PW0/Sfcxg4diW/btjPX4lJvg7Z5HG33HILZ8+epUGDBrz++us0b94cgHLlyvHyyy8TGRlJx44d3f7j69mzJ99+++3lZiqAJ598kvr161O/fn06dOjg9m6p+vXrp9gcM2zYMEaOHEl4eDg//PADH3744VXbjB8/nuHDh9OgQQPq1q17uWkrI1599VVuv/122rZtS6lSl4fT45VXXuHgwYPUq1ePhg0bXr576oEHHiA8PPyqTu4777yT2rVr06BBAzp06MAHH3zwt+OlZezYsTz55JOEh4ezadMmXn75Zbfbjxs3jttvv/1vZd27d/9b8vMGyY13BUVERGh2mcgp/lwCszYcYMrqvSzZcZRL3+7CwQHcUr8M3RqWo3mV4vj5ZZ9O9bw+rHRm1z8mJobrrrsu047nbbl9rKa05JX6p/R7KSIrVTXNSyTr4/CyovkD6dG0Aj2aVuBA/Hmmr93L1NX72LT/JOOX72H88j2UKRpM1wZl6dawHNeVsTuzjDHZmyWOLFS6aDAD2lRjQJtqbD14iqlr9jJtzT7ijp9jxILtjFiwnZphhbijcXnuaFSOUkWsU90Yk/1Y4vCRGmGFeeam2jzdsRYrdx1n6pq9/LJuP1sOnubtmZt599fNtK1ZkrsiKtD+ulLkC/D3dcjmGqT37hxjvOlauygscfiYiBBRuTgRlYvzf7fWZf6Ww/y4cg9zYw4x78/DzPvzMMUKBHJbw3Lc2aQ89coV9XXIJp2Cg4M5evQoJUqUsORhfO7SfBzBwRlv0bDEkY0EBfhxY50wbqwTxtHTfzF1zT4mrtjD5gOnGLN4J2MW7+S6MkW4s0l5bmtYlhKF8qV9UONz5cuXJy4u7prmP8hK58+fv6Z/KjldXqj/pRkAM8oSRzZVolA+HmhVhftbVmbjvpP8uDKOqWv2ErP/JG/8vIm3Z8ZwQ+1S3NWkAm1rlSTQ3+6szq4CAwMzPNOaL0RHR9OoUSNfh+Ezeb3+nrDEkc2JCPXKFaVeuaK80Lk2c2MOMXHFHuZvOcysjQeZtfEgoYXycXujstwVUYGaNtSJMcbLLHHkIPkC/Olcvwyd65fh0MnzTF69l4kr9rDt8Bm+WLiDLxbuoEH5ovRoWoFuDctRKJ/9eI0xmS/V/ywiEu7B/gmqGpOJ8RgPlSoSzMC21Xi4TVVW7znBxBVx/Lx2H2vj4lkbF8+/fomhW6Ny3N2sonWoG2MylbuPpL8DqwF3t4FUACqntEJEKgDfAKWBi8BIVf1YRN4DugAXgG1Af1U94ezzAvAAkAQ8rqqznPJOwMeAPzBKVd++8nx5lYjQuGIIjSuG8EqXOszcsJ9xS/ewbOcxvl+6m++X7ia8fFHublaRrg3LUiDIrkKMMdfG3X+R1araxs16RGSBm9WJwFOqukpECgMrRWQ2MBt4QVUTReQd4AXgORGpA/QC6gJlgTkiUtM51mfAjUAcsFxEpqvqJk8qmJcEB/pze6Py3N6oPFsPnuL7ZbuZtDKOdXHxrItbz5u/xHBbo7Lc3awSdcoW8XW4xpgcKtXE4S5piEgxVT3hbhtV3Q/sd16fEpEYoJyqJp9pZQlwp/O6GzBeVf8CdohILNDMWRerqtudc493trXE4UaNsMK80qUuz3WqzS/r9vP9st2s3HWcb5fs5tslu2lUsRi9m1WkS3hZ8gfZw4XGGM+lOsihiAxX1YEplJcDZqqqJ30gl/apDCwA6qnqyWTlPwE/qOq3IjIMWKKq3zrrvgRmOpt2UtUHnfI+QHNVHXzFOQYAAwDCwsKajB8/3tPwrnL69GkKFSqU4f2zqz2nLhK9J4HF+xI554wInT8AWpQNoF2FQMoXdt3Sm1vr7ymrv9U/r9a/Xbt21zzIYSERGYOrD0IBnKajmcBbngYiIoWAScCQK5LGS7ias767VJTC7krKQ79fle1UdSQwElyj417L6Ka5eXTYPsDZC4n8vG4/3y/dzZo9J5i7O5G5uxNpUimEu5tVpHDS1lxbf0/k5p+/J6z+ebv+nnCXOPoAXwLfi8g9QFPgR2Cwqk7z5OAiEograXynqpOTlfcDbgXa6/8ueeJwdbZfUh7Y57xOrdxkQIGgAHpEVKBHRAU27ovn+6W7mbZmHyt3HWflruMUCoS+CZu5N7ISZYvl93W4xphsJtXHjdXlfuAYMBeYCPRKR9IQXIknRlU/SFbeCXgO6KqqZ5PtMh3oJSL5RKQKUANYBiwHaohIFREJwtWB7t3prfKQumWL8s/b67P0xfa8dUd96pUrwukE+E/0Nlq/O49B361i2Y5j1zwomjEm93D3HMeHuJqELgDhwAqgu4h0B1DVoWkcuyWuq5b1InJpYuAXgU+AfMBsZ8C3Jao6UFU3isgEXJ3eicAgVU1yYhkMzMJ1O+5oVd2Ykcqa1BXMF0DvZhXp1bQCo6b+xtpzIfy64QC/rN/PL+v3U6dMEe5rWZmuDcoSHGid6cbkZe6aqjYke/1seg+sqotIud9ihpt9/gn8M4XyGe72M5lHRKgR4s9DtzfmQPx5vlu6i++X7mbT/pM8++M63poRQ+9mFa0Zy5g8zN3tuF9mZSAm+yldNJinOtZiULvq/LJuP18t3sGGvSf5T/Q2RizYTqe6penXojJNK4fYcOHG5CGp9nGIiPtZ0j3cxuR8wYH+dG9Snp8Gt2LSI9dza3gZBPhl/X56jPiDWz5ZxIQVezifkOTrUI0xWcBdU9VAETnpZr0A9wJvZm5IJrsSEZpUKk6TSsVTbMZ6e+ZmejWtQJ/rK1GmqDVjGZNbuUscXwEl09h/dCbGYnKQK5uxxizeyfq98fwnehsjF2yna8OyDGhTldqlbWgTY3Ibd30c/8jKQEzOdKkZ647G5Vi1+wSjf9/BzPX7mbxqL5NX7aVtzZI83KYq11ezaVONyS1sqFSTKVzNWCE0qRTC7qNn+XLRdiasiGP+lsPM33KYeuWKMKBNNTrXK02AzVZoTI5mf8Em01UsUYDXutVj8fM38NSNNQktFMSGvSd5fNxqot6P5qvfd3Dmr0Rfh2mMySBLHMZrQgoG8Vj7Gix67gb+dXt9qoYWJO74OV77aRMt3v6N92Zt5tCp874O0xiTTmkmDhGpLiKzRGSt8z7cmXDJGI8EB/pzd/OKzBnalhF9mtCkUgjx5xL4bN42Wr0zj+cnrSP20Glfh2mM8ZAnVxyjgNdwzeIHsB7XbbjGpIufn3BT3dJMeqQFkx65no51wkhIusj45Xvo8MF8Hvx6Bct32rhYxmR3nnSOF1TVxZfuiFFVFZEE74ZlcrsmlYozsm9xth0+zaiFO5i0Ko45MQeZE3OQiEohDL6hOm1rlrQ7sYzJhjy54jjqjFZ7aU6O24ADXo3K5BnVShbirTvq8/tzN/DYDdUpmj+QFbuOc99Xy7nts9+ZvemgXYEYk814csUxGNfw6LVFZBeu6WB7eTUqk+eULJyPpzrW4uG21fh2yS5GLdzO2rh4HvpmBbVLF+axG2pwc73S+PnZFYgxvuY2cYiIP9BAVW8QkaK4ppo9kTWhmbyoUL4ABratRr/rK/P9st2MmL+NzQdOMej7VVQvVYjB7apza3gZexbEGB9y+9fnzIcxxHkdb0nDZJX8Qf480KoKC55txxu31aNcsfzEHjrNkB/W0OGD+UxYsYeEpItpH8gYk+k8+dg2S0SGiEgZESlyafF6ZMbgupW3T2Ql5j0dxTvd61OpRAF2Hj3Lsz+uI+q9aL5dsou/Em1UXmOykid9HA87X59KVqZAxcwPx5iUBQX40bNpRbo3Ls9P6/Yx7LdYth0+w8tTNzDst1gebluV3s0q2uyExmSBNBOHqlbIikCM8USAvx+3NypP1wblmLlhP8N+i2XzgVO89tMmPpu3jYdaV+HeyEoUzGfDsBnjLWn+dYnI3SmVq+r3mR+OMZ7x9xNuDS9L53plmBNzkE9/i2X93njemrmZkQu280hUNe6NrGRXIMZ4gScfy1onex0M3ACsBCxxGJ/z8xM61i3NjXXCiN5ymI/nbGXNnhO8+UsMXy7awWM31OCuiPIE2l1YxmSaNP+aVPWRZEt/oCGQ5sc4EakgIvNEJEZENorIE055cRGZLSJbna8hTrmIyCciEisi60SkcbJj9XO23yoi/TJeXZNbiQjtapViyqMt+LJfBLVLF2Z//HlenLKeDh/MZ+rqvSRdtAcJjckMGfkYdgqo6cF2icBTqnodEAkMEpE6wPPAXFWtAcx13gPcDNRwlgHA5+BKNMArQHOgGfDKpWRjzJVEhPbXhTHj8dZ82rsRVUMLsuvoWYb8sIabP17ArxsO2JPoxlwjT/o4puAMN4Ir0dQFpqW1n6rux/WUOap6SkRigHJANyDK2exrIBp4zin/Rl1/1UtEpJiIlHG2na2qx5x4ZgOdgHEe1dDkSX5+QpcGZbm5Xmkmr97Lx3O2suXgaQZ+u5Lw8kV5qmMt2tQItbGwjMkASevTl4i0T/Y2EdilqjvTdRKRysACoB6wW1WLJVt3XFVDRORn4G1VXeSUz8WVUKKAYFV90yn/B3BOVd+/4hwDcF2pEBYW1mT8+PHpCfFvTp8+TaFChTK8f06XG+ufcFGZvyeR6dsSOHnB9TtfK8SP7jWDqBny95bX3Fj/9LD65936t2vXbqWqRqS1nSed4+1V9cXkBSLyryvLUiMihYBJwBBVPenmE15KK9RN+d8LVEcCIwEiIiI0KirKk/BSFB0dzbXsn9Pl1vrfCLx4IZGvF+9i+Pxt/Hk8gX8tPU9UrZI83bEW9coVBXJv/T1l9c/b9feEJ30cnVIou8WTg4tIIK6k8Z2qTnaKDzpNUDhfDznlcUDyZ0bKA/vclBuTbgWCAngkqhoLn2vH4+1rUDDIn+g/D3Prp4t45NuVbD14ytchGpPtpZo4RORhEVkN1BKRVcmWrUBMWgcW16XFl0CMqn6QbNV04NKdUf34X3/JdKCvc3dVJBDv9JPMAjqKSIjTKd7RKTMmw4oEBzL0xposfO4GBrSpSr4AP2ZuOMBNHy1g1Pq/OBBvU9oakxp3TVUTcN319Bb/u/MJ4JSqHkp5l79pCfQB1ovIGqfsReBtYIKIPADsBu5y1s0AOgOxwFmgP4CqHhORN4DlznavX+ooN+ZaFS8YxIudr+P+llUYNm8r45ftYdHeRKLen8eA1lUZ0LYahewpdGP+JtW/CFU9DhzH+cfu3BYbDASISFlVddtc5HRyp9ah0f7KAuduqkGpHGs0MNrd+Yy5FqWLBvPmbfV5sFVVnh67kBUHk/jkt1i+X7aHpzrW5K4m5W0od2Mcaf4liEhnEdmCq69hKbAH+M3bgRnjC5VDCzK4UTA/DryehhWKceT0X7wweT2dP1nIvD8P2TMgxuBZ5/i/cDU7/ekMeNgJ17MXxuRaEZWLM+XRFnzauxHlQ/Kz5eBp+n+1nL6jl7Fp30lfh2eMT3mSOBJV9TDgJyKiqrOBxmntZExOJ+J6iHDuU215sXNtCgcHsHDrEW75dCHP/riWgyetA93kTZ4kjngRKQgsAr4RkX8DNvWayTPyBfgzoE015j/TjvtaVMZfhAkr4oh6L5oPZ2/hzF+Jvg7RmCzlSeK4DTiPawrZaGAv0MWLMRmTLRUvGMSrXesye2hbbqobxrmEJD6eu5V270fzw/LdNoiiyTPcJg4R8Qd+VNUkVU1Q1S9V9QOn6cqYPKlKaEFG9IlgwsPX06B8UQ6d+ovnJq3nlk8WsmCL/WmY3M9t4lDVJOCCzTFuzNWaVSnOlEdb8nGvhpQrlp/NB07Rd/Qy7vtqGTuOnPF1eMZ4jSdPNp0G1orIf4HLfw2qOtRrURmTQ/j5Cd0aluOmuqUZs3gnn/0WS/Sfh1kcu4CH2lRhULvqFAiyBwhN7uJJH8cc4E1gGbAx2WKMcQQH+jOwbTV+ezqKO5uU50LSRT6bt40O/57PjPX77fkPk6uk+VFIVb8UkSCgoqrGZkFMxuRYJQvn4/27GtC7WUX+b9oGNu47yaPfraJV9VBe7VqH6qUK+zpEY66ZJ0+O3wKsB2Y77xs6kzsZY1LRpFII0we34s3b6lE0fyCLYo/Q6aOFvDUjhtN2+67J4Txpqnod17StJwBUdQ1Q3ZtBGZMb+PsJ90ZWYt7TUfRuVpEkVUYs2E77f0czbc1ea74yOZYniSNBVU9cUWa/8cZ4qHjBIN66oz5TH21JgwrFOHjyL54Yv4ZeI5fw5wGb/8PkPJ4kjhgR6YFryJEqIvIRsMTLcRmT6zSoUIwpj7Tgne71KV4wiKU7jtH5k4W89tNGTp5P8HV4xnjMk8QxGGiCa5iRKcBfuJ4iN8akk5+f0LNpReY9FUXf6yuhqnz1+05ueD+aH1fGcdGePjc5QJqJQ1XPqOpzuEbIvV5Vn1PVs94PzZjcq2iBQF7vVo+fHmtFRKUQjpy+wNMT13LXiD/YuC/e1+EZ45Ynd1U1dqaQ3QJsFZGVImKj4xqTCeqWLcrEgdfzQY8GhBbKx8pdx+k67HfemhnDuQtJvg7PmBR50lT1FTBUVcuranngKafMGJMJRIQ7Gpfnt6fbcl+LylxUZcT87XT6eAG/xx7xdXjGXMWTxHFGVeddeqOq0biGITHGZKIiwYG82rUukx9pQe3Shdl19Cz3jFrKMxPXcuLsBV+HZ8xlniSOpSLymYi0EpGWIvIJME9EwkUk3NsBGpPXNKoYwk+PteKZm2oRFODHxJVxdPhgPtPX7rNnP0y24EniiADCgbeAt4FGQFvgM2BYajuJyGgROSQiG5KVNRSRJSKyRkRWiEgzp1xE5BMRiRWRdcn7UESkn4hsdZZ+GaumMTlLoL8fg9pV59cnWtO8SnGOnL7A4+NW88DXK9h74pyvwzN5nCd3VbV2s7Rxs+sYXPOTJ/cu8JqqNgT+z3kPcDNQw1kGAJ8DiEhx4BVcT643A14RkRDPq2dMzla1ZCHGPRTJW3fUp3BwAL9tPkTHD+Yz5vcdNnGU8RlP7qoqIiKPisi7IvLBpSWt/VR1AXDsymLg0tweRYF9zutuwDfqsgQoJiJlgJuA2ap6TFWP4xov68pkZEyu5ucn9G5WkblD23JzvdKcuZDEqz9tovvni+3Jc+MTnkwUMANYhWugw2uda3wIMEtE3seVtFo45eWAPcm2i3PKUiu/iogMwHW1QlhYGNHR0RkO8vTp09e0f05n9c++9e9ZHmoE5uOe1u/XAAAgAElEQVSbTRdYs+cEnT9eQOeqgXSpGkiQv2TKObJz/bNCXq+/JzxJHAVU9fFMOt8jwJOqOskZxuRLoAOQ0m+8uim/ulB1JDASICIiQqOiojIcZHR0NNeyf05n9c/e9Y8CHjyfwLu/bubbJbv5aVsCG08G8dbt9WletcQ1Hz+719/b8nr9PeFJ5/j3ItJfREo6zVZFrmEq2X7AZOf1RFz9FuC6kqiQbLvyuJqxUis3Jk8rEhzIm7fVZ+LA66lWsiDbD5+h58glvDB5PfHnbNwr412eJI7TwEfAav43+98Gt3ukbh+uO7IAbgC2Oq+nA32du6sigXhV3Q/MAjqKSIjTKd7RKTPGAE0rF2fGE615on0NAv2Fcct2c9OHC1iw5bCvQzO5mCdNVc8ANVT1UHoOLCLjcF1Vh4pIHK67ox4CPhaRAOA8Tp8Ern6UzkAscBboD6Cqx0TkDWC5s93rqnplh7sxeVq+AH+evLEmt4SX4blJ61i9+wR9Ry+jT2QlXuhc2+Y8N5nOk9+oTcDJ9B5YVXunsqpJCtsqMCiV44wGRqf3/MbkNTXDCvPjwBaMWLCND2dvYeySXSzceph/92hAk0rFfR2eyUU8SRwXgNUi8huuIdUBUNWhXovKGJMh/n7Co1HViapZiqET1rD5wCnuGv4HD7etxpAONcgX4O/rEE0u4EkfxwzgfVy35G5Mthhjsqk6ZYswbXBLHomqBsDn0dvoNux3Yvanu/HAmKukecWhql+KSBBQUVVjsyAmY0wmyBfgz3OdatPhulIMnbCWzQdO0XXYIoZ0qMnDbaoS4O/J50ZjrubJk+O34Hr4b7bzvqGITPF2YMaYzNGkUnFmPtGaPpGVSEhS3pv1Jz1G/MGOI2d8HZrJoTz5yPE6rrGiTgCo6hqgujeDMsZkrgJBAbxxWz2+ub8ZpYsEs2r3CTp/vJCxf+y0EXdNunmSOBJU9cQVZfabZkwO1KZmSWYNacNtDctyLiGJf0zbSN/Ry9gfbyPuGs95kjhinOFB/ESkioh8BCzxclzGGC8pWiCQj3o14j/3NCakQCALtx6h44cLmLI6zq4+jEc8SRyDcT17cRHXcCHncQ1WaIzJwTrXL8OsJ9vQ4bpSnDqfyJM/rOWRb1dx8oIlD+NeqolDRP4FoKpnVPU5VW3kLM+r6tmsC9EY4y2lCgfzRd8I3u0eTqF8Afy68QD/+P2czXVu3HJ3xWHzXhiTB4gIPZpWYOYTrWlWpTjxfyn3frmU92f9SWLStc6kYHIjd4nD3xlcsHhKS5ZFaIzJEhWKF2DcQ5F0qxaIAMPmxdJr5BKbqtZcxV3iqA2sTGVZ4f3QjDFZzd9PuL1GEN89GElYkXys2HWczh8vZNbGA74OzWQj7hLHJlWtqqpVUliqZlmExpgsd321Esx8og031C5F/LkEHh67klenb+R8QpKvQzPZgI05YIxJUfGCQXzZL4KXb7mOQH9hzOKd3PGfxWw/fNrXoRkfc5c4Ps6yKIwx2ZKI8GDrqkx6pAUVixdg0/6T3PrpIiavivN1aMaHUk0cqjomC+MwxmRj4eWL8cvjrejSoCxnLyQxdMJanpqwljN/Jfo6NOMD1lRljPFI4eBAPunVkHe61yc40I9Jq+Lo8ukiNu6L93VoJotZ4jDGeExE6Nm0Ij8NbkWtsMJsP3KG2/+zmG/+sMES8xJPhlWvKSJzRWSD8z5cRF72fmjGmOyqRlhhpg1uSe9mFbmQeJH/m7aRgd+uJP5sgq9DM1nAkyuOL4AXgAQAVV0H9PJmUMaY7C840J+37qjPsLsbUThfALM2HqTzJwtZueuYr0MzXuZJ4iigqsuuKEuzR0xERovIoUtXKsnKHxORP0Vko4i8m6z8BRGJddbdlKy8k1MWKyLPexCvMSYL3RpelhlPtKZBhWLsPXGOniOWWNNVLudJ4jgiItVw5uAQkTuB/R7sN4YrxrsSkXZANyBcVevimsscEamD6yqmrrPPf0TEX0T8gc+Am4E6QG9nW2NMNlKheAEmPnw9D7SqQuJF5f+mbeSpiWvtgcFcypPEMQgYAdQWkb24hlR/JK2dVHUBcOU16yPA26r6l7PNIae8GzBeVf9S1R1ALNDMWWJVdbuqXgDGO9saY7KZoAA//nFrHT7u1ZDgQD8mr9rLncMXE3fcBtPObdJMHM4/7Q5ASaC2qrZS1Z0ZPF9NoLWILBWR+SLS1CkvB+xJtl2cU5ZauTEmm+rWsBxTHm1JxeIF2LD3JF0+XcSirTZMe24SkNYGIlIM6AtUBgJEBABVfTyD5wsBIoGmwAQRqQpICtsqKSe2FBtORWQAMAAgLCyM6OjoDITncvr06WvaP6ez+lv9M6P+zzWCEWv9WXckgT5fLuWumoHcXCWQS/9Dsqu8/vP3RJqJA5iBa6rY9bhmAbwWccBkdfWaLRORi0CoU14h2XblgX3O69TK/0ZVRwIjASIiIjQqKirDQUZHR3Mt++d0Vn+rf2bVv1N75aM5W/j0t1gmbEngTL5Q3r0znIL5PPnX4xt5/efvCU9+esGqOjSTzjcVuAGIFpGaQBBwBJgOfC8iHwBlgRrAMlxXIjVEpAqwF1cH+t2ZFIsxxsv8/YSnOtaiXrmiPDVhLb+s38+Wg6cY2TeCKqEFfR2eySBPOsfHishDIlImPRM5icg44A+glojEicgDwGigqnOL7nign7psBCYAm4BfgUGqmqSqibjmPJ8FxAATnG2NMTnITXVLM21wS6qXKsTWQ6fp+uki5mw66OuwTAZ5csVxAXgPeIn/9S8o4HZODlXtncqqe1PZ/p/AP1Mon4GrucwYk4NVK1mIqYNa8vSEtfy68QAPfrOCx9vXYEj7Gvj5Ze9+D/N3nlxxDAWqq2plm8jJGHMtCuUL4PN7G/Nsp1qIwCdzt/LgNyuIP2dDleQkniSOjYDdiG2MyRQiwqNR1fm6fzOK5g/kt82H6DZsEX8eOOXr0IyHPEkcScAaERkhIp9cWrwdmDEmd2tTsyQ/P9aKOmWKsPPoWW777Hd+XpfiTZMmm/EkcUzF1fewGFiZbDHGmGtSoXgBJj3SgtsbleNcQhKDv1/NWzNjSLpo41xlZ2l2jqvq11kRiDEmb8of5M8HPRoQXr4ob/4Sw4j529lx+Awf9WpIgaDs+7xHXubJfBw1RORHEdkkItsvLVkRnDEmbxAR+reswtgHmlEkOID/bjpIjxF/cPDkeV+HZlLgSVPVV8DnuIZSbwd8A4z1ZlDGmLypRbVQJj/akkolXONcdRv2u01Nmw15kjjyq+pcQFR1l6q+iuvpb2OMyXTVSxViyqMtiagUwoGT57lr+B/MjbGHBbMTTxLHeRHxA7aKyGARuR0o5eW4jDF5WPGCQXz3UHNua1iWsxeSeOibFYxetMMmh8omPEkcQ4ACwONAE6AP0M+bQRljTL4Afz7s2ZAnO9TkosLrP2/ilekbSUy61rFWzbXy5K6q5c7L00B/74ZjjDH/IyI80aEGlUML8MzEdXzzxy52HT3rmuc8ONDX4eVZqSYOEfmJVOa+AFDVrl6JyBhjrtCtYTnKFcvPgLErmb/lMHd+/gdf3hdB+ZACvg4tT3J3xfF+lkVhjDFpiKhcnCmPtuD+Mcv58+ApbvtsMV/2i6BBhWK+Di3PcdfHsUNV56e2ZFmExhjjqFSiIJMfaUmLaiU4cvoveo78g5nr9/s6rDzHXeKYeumFiEzKgliMMSZNRQsE8vX9zegZUYHzCRd55LtVfB69ze64ykLuEkfyAfJtGHVjTLYR6O/H293r88LNtQF459fNPDdpHRcS7Y6rrOAucWgqr40xxudEhIfbVmP4vY0JDvRjwoo4+o1eRvxZm9vD29wljgYiclJETgHhzuuTInJKRE5mVYDGGONOp3pl+GHA9ZQsnI8/th/ljs9/Z++Jc74OK1dLNXGoqr+qFlHVwqoa4Ly+9L5IVgZpjDHuNKhQjKmDWlIrrDDbDp/hzs8XE3vIJobyFk+eHDfGmGyvXLH8THj4eiIqhbA/3jXG1Zo9J3wdVq7ktcQhIqNF5JCIbEhh3dMioiIS6rwXZ2bBWBFZJyKNk23bT0S2OosNdWKMSVXRAoGMfaA5N9QuxfGzCdz9xRIWbj3s67ByHW9ecYwBOl1ZKCIVgBuB3cmKbwZqOMsAXMO4IyLFgVeA5kAz4BURCfFizMaYHC5/kD8j+jThjkblOHshifvHLLcpaTOZJxM5VRGR4GTv84tI5bT2U9UFwLEUVn0IPMvf79TqBnyjLkuAYiJSBrgJmK2qx1T1ODCbFJKRMcYkF+jvx/t3NeCBVlVISFIeG7easUt2+TqsXMOTK46JQPKbo5OcsnQTka7AXlVde8WqcsCeZO/jnLLUyo0xxi0/P+HlW67jmZtqoQr/mLqBj+dstQcFM4EnE/oGqOqFS29U9YKIBKX3RCJSAHgJ6JjS6hTK1E15SscfgKuZi7CwMKKjo9Mb4mWnT5++pv1zOqu/1T831b+uwH11g/h64wU+nLOFdVu2c891QfhJSv9ecl/9vcGTxHFYRLqq6nQAEekGHMnAuaoBVYC14vqBlQdWiUgzXFcSFZJtWx7Y55RHXVEendLBVXUkMBIgIiJCo6KiUtrMI9HR0VzL/jmd1d/qn9vqHwU0X7+fJ8avYe7uRAqGlOL9uxoQFHB1o0turH9m86SpaiDwoojsFpE9wHPAw+k9kaquV9VSqlpZVSvjSgqNVfUAMB3o69xdFQnEq+p+YBbQUURCnE7xjk6ZMcaky831yzCmf1MKBvkzfe0+HvpmBWcvJPo6rBwpzcShqttUNRKoA9RR1RaqGpvWfiIyDvgDqCUicSLygJvNZwDbgVjgC+BR59zHgDeA5c7yulNmjDHp1qJ6KOMGRFK8YBDztxzm3lFLOXH2Qto7mr9xN5HTvar6rYgMvaIcAFX9wN2BVbV3GusrJ3utwKBUthsNjHZ3LGOM8VR4+WL8OPB6+ny5jFW7T9BjxB98c39zShcNTntnA7i/4ijofC2cwlLIy3EZY4zXVC1ZiEmPtKBGqUJsOXia7p8vZvvh074OK8dI9YpDVUc4L+eo6u/J14lIS69GZYwxXla6aDATB15P/zHLWb37BHcN/4Mx/Zv5OqwcwZPO8U89LDPGmBylWIEgvnuwOW1qluTomQv0/mIJm44m+TqsbM9dH8f1QAug5BX9HEUAf28HZowxWaFAUACj+kbw9MS1TF+7jw9WJlK3/mHa1izp69CyLXdXHEG4+jIC+Hv/xkngTu+HZowxWSMowI+PejbknuYVSbwID32zgnl/HvJ1WNmWuz6O+cB8ERmjqjbIizEmV/PzE968rR4H9u9j7u5EHv5mJZ/f25j214X5OrRsx5M+jrMi8p6IzBCR3y4tXo/MGGOymIhw73VB3NeiMheSLjLw25XM3nTQ12FlO54kju+AzbiGC3kN2InrYTxjjMl1RIRXutS5PLLuo9+tZNbGA74OK1vxJHGUUNUvgQRVna+q9wORXo7LGGN8RsQ1su5DrV3JY9B3q/h1w35fh5VteJI4Epyv+0XkFhFphGuwQWOMybVEhBc7X8fDbauSeFEZ9P1qZqy35AGejY77pogUBZ7C9fxGEeBJr0ZljDHZgIjwfKfa+Ivwn+htPDZuNUkXlS4Nyvo6NJ9KM3Go6s/Oy3ignXfDMcaY7EVEeOamWvj7CZ/+FssT41dzUZVuDfPunHKeTB1bVUR+EpEjInJIRKaJSNWsCM4YY7IDEWHojTV5vH0NLio8+cMapq7e6+uwfMaTPo7vgQlAaaAsrmljx3kzKGOMyW4uJY8hHVzJY+iENUxeFefrsHzCk8QhqjpWVROd5VtSmb7VGGNyuyEdavLUjTW5qPDUxLVMXLHH1yFlOXdjVRV3Xs4TkeeB8bgSRk/glyyIzRhjsqXH2tfAz094b9afPDtpHarQo2mFtHfMJdx1jq/ElSguzeiefLpYxTUznzHG5EmD2lXH3094e+Zmnp20jiRVejer6OuwsoS7saqqZGUgxhiT0wxsWw0/gX/N2MwLk9dzUZV7mlfydVhe58lzHIhIPVxzjl+eW1FVv/FWUMYYk1MMaFMNPxHe/CWGl6Zs4KJCn8jcnTzSTBwi8goQhStxzABuBhYBljiMMQZ4sHVV/ER4/edN/GPqBoID/LgrIvf2eXhyV9WdQHvggKr2BxoA+dLaSURGO899bEhW9p6IbBaRdSIyRUSKJVv3gojEisifInJTsvJOTlms00lvjDHZzv2tqvDyLdcB8Nykdbl6bCtPEsc5Vb0IJIpIEeAQ4MkDgGOATleUzQbqqWo4sAV4AUBE6gC9gLrOPv8REX8R8Qc+w3WVUwfo7WxrjDHZzoOtq/KE85DgY+NWs2DLYV+H5BWeJI4VzpXBF7jutFoFLEtrJ1VdABy7ouy/qprovF3C/wZL7AaMV9W/VHUHEAs0c5ZYVd2uqhdw3RLczYOYjTHGJ4Z0qEH/lpVJSFIeHruSFTuPpb1TDpNm4lDVR1X1hKoOB24E+jlNVtfqfmCm87ockPwpmjinLLVyY4zJlkSEf9xShzublOdcQhL9xyxn4754X4eVqdw9AFhbVTeLSOMU1jVW1VUZPamIvAQk4pokCv73rEhySsqJLcWn1kVkADAAICwsjOjo6IyGx+nTp69p/5zO6m/1t/pHX/Nxbi6h7AzzZ8XBRHoNX8RLzfNTuqAnjTzZn7u7qp4CHgL+ncI6BW7IyAlFpB9wK9BeVS8lgTgg+S0I5YF9zuvUyv8ekOpIYCRARESERkVFZSQ8AKKjo7mW/XM6q7/V3+oflSnHatUmiQe/XsHCrUf4ZJ0y8ZHmlCuWP1OO7Uuppj9Vfcj52i6FJaNJoxPwHNBVVc8mWzUd6CUi+USkClADVz/KcqCGiFQRkSBcHejTM3JuY4zJavkC/BnRpwlNKoWwL/48945ayuFTf/k6rGvmrqnqDnc7qupkd+tFZByu5z9CRSQOeAXXXVT5gNkiArBEVQeq6kYRmQBswtWENUhVk5zjDAZmAf7AaFXd6GHdjDHG5woEBTD6vqb0HrmETftP0nf0MsY/FEnRAoG+Di3D3DVVdXG+lgJaAL8579sB0YDbxKGqvVMo/tLN9v8E/plC+QxcDx4aY0yOVDR/IN880Iwew/8gZv9J+o9ZxtgHmlMwn0eDd2Q77pqq+jt3TylQR1W7q2p3XM9aGGOMSYfQQvn49kFXH8eq3Sd4eOxK/kpM8nVYGeJJF39lVU3+CORBoKaX4jHGmFyrbLH8jH2gGaGFglgUe4THx60mMemir8NKN08SR7SIzBKR+5w7omYA87wclzHG5EpVSxZi7APNKRIcwKyNB3l20jouXsxZc+N58gDgYGA4rjGqGgIjVPUxbwdmjDG51XVlivBV/2bkD/Rn8qq9vP7zJv73dEL259HTKKo6RVWfVNUngcMi8pmX4zLGmFytSaUQRvZtQpC/H2MW7+TD2Vt8HZLHPEocItJQRN4RkZ24Zv7b7NWojDEmD2hdoySf9G6Ev5/wyW+xfLFgu69D8kiqiUNEaorI/4lIDDAM19Pd4jwA+GmWRWiMMblYp3qlebd7OAD/nBHD+GW7fRxR2txdcWzGNQ9HF1Vt5SSLnHnvmDHGZGPdm5Tn1S6uGSNenLKeOZsO+jgi99wlju7AAWCeiHwhIu1JeTBCY4wx1+i+llV4PNlcHuviTvg6pFS5ewBwiqr2BGrjelL8SSBMRD4XkY5ZFJ8xxuQZT3aoQffGruHY7x+zgj3Hzqa9kw94cjvuGVX9TlVvxTU67RrApnA1xphMJiK8dUd9WlYvwZHTf3HfV8uIP5vg67Cukq7B4VX1mKqOyOjouMYYY9wLCvDj83ubUCusMNsOn2HA2BXZbmiS3DGriDHG5CJFggP5qn9TworkY+mOYzz7Y/Z6utwShzHGZENli+Vn9H1NKRjkz7Q1+/j37D99HdJlljiMMSabqlu2KJ/d0xh/P+Gzedv4fmn2eMbDEocxxmRjUbVK8eZt9QD4x7QNzPvzkI8jssRhjDHZXu9mFRnUrhpJF5VB361iw954n8ZjicMYY3KApzvWolvDspy9kMT9Y5az98Q5n8ViicMYY3IAEeHdO8OJrFqcQ6f+ov9Xy4g/55tnPCxxGGNMDpEvwJ8R90ZQvVQhthw8zSPfruRCYtbPIOi1xCEio0XkkIhsSFZWXERmi8hW52uIUy4i8omIxIrIOhFpnGyffs72W50ZCI0xJs8qWiCQr+5rSmihfCzedpTnJ6/L8kmgvHnFMQbodEXZ88BcVa0BzOV/Q5fcDNRwlgHA5+BKNMArQHOgGfDKpWRjjDF5VYXiBfjqvqaXZxD8cM7WLD2/1xKHqi4Ajl1R3A342nn9NXBbsvJv1GUJUExEygA3AbOdoU6OA7O5OhkZY0yeU798UYbd3Qg/gU/mbmXCij1Zdu6s7uMIU9X9AM7XUk55OSB5reOcstTKjTEmz2t/XRivd3M94/Hi5PUs3Ho4S84bkCVnSVtK83yom/KrDyAyAFczF2FhYURHR2c4mNOnT1/T/jmd1d/qb/WP9nUYHisPdK4SyIwdCTw0ZhkvReanQmHvXhNkdeI4KCJlVHW/0xR16RHIOKBCsu3KA/uc8qgryqNTOrCqjgRGAkRERGhUVFRKm3kkOjqaa9k/p7P6W/2t/lG+DiNd2rRRHh+/mp/X7eez9cqUQc0pUzS/186X1U1V04FLd0b1A6YlK+/r3F0VCcQ7TVmzgI4iEuJ0ind0yowxxjj8/IT372pA08ohlCqSjwC/HHrFISLjcF0thIpIHK67o94GJojIA8Bu4C5n8xlAZyAWOAv0B9f8HyLyBrDc2e51Vb2yw90YY/K84EB/RvVtSmCAUCDIu41JXju6qvZOZVX7FLZVYFAqxxkNjM7E0IwxJlcqWiAwS85jT44bY4xJF0scxhhj0sUShzHGmHSxxGGMMSZdLHEYY4xJF0scxhhj0sUShzHGmHSRrB7HPSuIyGFg1zUcIhQ4kknh5ERWf6u/1T9vqqSqJdPaKFcmjmslIitUNcLXcfiK1d/qb/XPu/X3hDVVGWOMSRdLHMYYY9LFEkfKRvo6AB+z+udtVn/jlvVxGGOMSRe74jDGGJMueTZxiEgnEflTRGJF5PkU1ucTkR+c9UtFpHLWR+k9HtR/qIhsEpF1IjJXRCr5Ik5vSut7kGy7O0VERSRX3WnjSf1FpIfze7BRRL7P6hi9yYO/gYoiMk9EVjt/B519EWe2pKp5bgH8gW1AVSAIWAvUuWKbR4HhzutewA++jjuL698OKOC8fiQ31d/T74GzXWFgAbAEiPB13Fn8O1ADWA2EOO9L+TruLK7/SOAR53UdYKev484uS1694mgGxKrqdlW9AIwHul2xTTfga+f1j0B7EZEsjNGb0qy/qs5T1bPO2yW45nvPTTz5HQB4A3gXOJ+VwWUBT+r/EPCZqh4HUNVDWRyjN3lSfwWKOK+LAvuyML5sLa8mjnLAnmTv45yyFLdR1UQgHiiRJdF5nyf1T+4BYKZXI8p6aX4PRKQRUEFVf87KwLKIJ78DNYGaIvK7iCwRkU5ZFp33eVL/V4F7namvZwCPZU1o2Z93J6bNvlK6crjy9jJPtsmpPK6biNwLRABtvRpR1nP7PRARP+BD4L6sCiiLefI7EICruSoK1xXnQhGpp6onvBxbVvCk/r2BMar6bxG5Hhjr1P+i98PL3vLqFUccUCHZ+/JcfRl6eRsRCcB1qXosS6LzPk/qj4h0AF4CuqrqX1kUW1ZJ63tQGKgHRIvITiASmJ6LOsg9/RuYpqoJqroD+BNXIskNPKn/A8AEAFX9AwjGNY5VnpdXE8dyoIaIVBGRIFyd39Ov2GY60M95fSfwmzq9ZLlAmvV3mmlG4Eoaualt+xK33wNVjVfVUFWtrKqVcfXzdFXVFb4JN9N58jcwFddNEohIKK6mq+1ZGqX3eFL/3UB7ABG5DlfiOJylUWZTeTJxOH0Wg4FZQAwwQVU3isjrItLV2exLoISIxAJDgVRv18xpPKz/e0AhYKKIrBGRK/+ocjQPvwe5lof1nwUcFZFNwDzgGVU96puIM5eH9X8KeEhE1gLjgPty0YfHa2JPjhtjjEmXPHnFYYwxJuMscRhjjEkXSxzGGGPSxRKHMcaYdLHEYYwxJl0scZgcwxmhdmyy9wEiclhE3A4JIiL3iciwdJwnSkTinduQ14jInGuJO9lxh4hIgWTvZ4hIscw4dirnK+mM7LxaRFpfsS5QRN4Wka0iskFElonIzW6OVUBEfhGRzc5IuW97K26T/VniMDnJGaCeiOR33t8I7PXSuRaqakNn6XDlSmc0gfQaAlxOHKra2cvDd7QHNqtqI1VdeMW6N4AyQD1VrQd0wfW0vDvvq2ptoBHQ0l2iMbmbJQ6T08wEbnFe98b1YBYAIlJcRKY6cycsEZHwK3d2PoVPEpHlztLS0xOLyBgR+UBE5gHviEgzEVnsfKJfLCK1nO38ReR9EVnvxPKYiDwOlAXmOfvz/+2dTYiVZRTHfycLKskJs0URkwRtXMhAtRCmD8JVuNBa2QdZtLBF5jYMCgv6oEVZCzGNIiow7FMIXKjZBxQ0TuOUi4JmEUTYKrUgkn+Lcy7z8nadua8uhrn+f/AwZ57nDM95hmHOfd5z7/9ExEx9IrvX/2S6xtaaWxkRxyPi9XqVf6CRNJtxXR/ZM6XXO2U0IsZIVd+76tZ0WcP/clL59rGelIyk3yXtrfWNFft0RLxQ639JOlT2P8AEw6eYbAZloXXdPTwGHcApYDUpc38pMEkK8O2v9VeBp8q+E5gsexPwWtnvAuNljwLH++xzB6mGPFljW82/CewHltT3y4CLy14L7Cv7UWBfY215fZ0BVjT2mSG1j24CjgFLyU/r/0C+ql8J/AuMlf9e4P4+8X4KPIHliDUAAAIuSURBVFj2w8BH7XO3/FcDR8/yO76WlNq4mhQ5PAisb/lcSUqP3LDQfxMeCzMuVHVcs0iRNBXZjXEjKXXdZBy4p/wORsRVETHS8lkLrIrZ1irLIuIKSSdbfl9IWtcnhPclnSl7BHgrIm4klVUvaeyxUylrgaT5xDHHgQ8lnQaIiA+AW0ntpF8kTZbfd2QyabMGuLvst8mbxrlyC3BY0omK5R3gNlK3qveI7j1gh6Rh0a0yHXHiMIuRT4CXyJtBs0fKIFLZFwFrJP19jnufbtjPAIckbahkdrgRRxctn7kahDVVic8A/3tU1Yf59v4ZGD1LwpyvWdku4CdJLw8QhxlSXOMwi5E3gO2SjrXmjwD3Qb4zCvhD0p8tnwOkuB3lN3YecYwwW5zf1Npjc6+AHhHLa/4k/QvQR4D19c6lpcAGoF3MnouvSXVXyPN/OZezsrPjHmBHKcMSEddE9l75Brg9IlZExBLyZvd5+TxLnnlrh9jMEOLEYRYdkn6V9EqfpaeBmyNiCnieWVn8Jlt6PqX6uvk8QnkReC4iviJ7WPfYTdYJpkpZ9d6a3wV81iuON84zQdZPviX/ce+WdLRDHFuAh+rcDwCPD/AzT5IS4T9GxDT5KOqEpN+AJ0g13O+BCUkfR8R1ZG+WVcBEFdwf6RCjGSKsjmuMMaYTvnEYY4zphBOHMcaYTjhxGGOM6YQThzHGmE44cRhjjOmEE4cxxphOOHEYY4zphBOHMcaYTvwHccL6N80qjCYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import cantera as ct \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# xxxxxxxxxx\n",
    "# Get all of the Species objects defined in the GRI 3.0 mechanism\n",
    "species = {S.name: S for S in ct.Species.listFromFile('gri30.cti')}\n",
    "\n",
    "# Create an IdealGas object with species representing complete combustion\n",
    "complete_species = [species[S] for S in ('CH4','O2','N2','CO2','H2O','NO','NO2','CO','AR')]\n",
    "gas1 = ct.Solution(thermo='IdealGas', species=complete_species)\n",
    "\n",
    "phi = np.linspace(0, 0.95, 20)\n",
    "#print(phi)\n",
    "T_complete = np.zeros(phi.shape)\n",
    "dataset_molefrac = []\n",
    "mco= np.zeros(phi.shape)\n",
    "mno2=np.zeros(phi.shape)\n",
    "mno=np.zeros(phi.shape)\n",
    "for i in range(len(phi)):\n",
    "    var1 = (10.32*phi[i])/(1-phi[i])\n",
    "    gas1.TPX = 850, 101325*35, 'CH4:0.75, O2:2, N2:7.52, AR:%5.6f' % var1\n",
    "    #\n",
    "    gas1.equilibrate('HP')\n",
    "    T_complete[i] = gas1.T\n",
    "    mco[i]= gas1['CO'].X\n",
    "    mno2[i] = gas1['NO2'].X\n",
    "    mno[i] = gas1['NO'].X\n",
    "    \n",
    "    dataset_molefrac.append(gas1.X[3])\n",
    "print(\"dataset_molefrac\" + str(dataset_molefrac))\n",
    "    #print(dataset_molefrac)\n",
    "    #print(dateset_set_temp)\n",
    "    #print(gas1.P)\n",
    "# Print the final results\n",
    "print (T_complete)\n",
    "\n",
    "plt.plot(phi, T_complete, label='Tad vs Mole Fraction of Ar', lw=2)\n",
    "\n",
    "#plt.plot(phi, T_Diff, label='T Diff', lw=2)\n",
    "plt.grid(True)\n",
    "plt.legend(loc=1)\n",
    "plt.xlabel('Mole Fraction of Co2')\n",
    "plt.ylabel('Adiabatic Flame Temperature [K]');\n",
    "print()\n",
    "\n",
    "fig4 = plt.figure()\n",
    "ax4 = fig4.add_subplot(111)\n",
    "ax4.plot(phi, mco, label='CO', lw=2)\n",
    "ax4.plot(phi, mno, label='NO', lw=2)\n",
    "ax4.plot(phi, mno2, label='NO2', lw=2)\n",
    "ax4.set_yscale('log')\n",
    "plt.xlabel('Mole Fraction of Ar')\n",
    "plt.ylabel('Mole Fraction')\n",
    "ax4.grid(True)\n",
    "ax4.legend(loc=1)\n",
    "print()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Conclusion"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This report summarizes the findings of how hydrocarbon fuels like C3H8, C2H6 and CH4 is combusted with air under various conditions. We observe how presence of more species of gases effect the gas and how we can also benefit from it. All of this was done by using chemical models and thermodynamic data to replicate realistic combustion scenarios under varying conditions.\n",
    "\n",
    "Under highly ideal conditions, we concluded that by varying the equivalence ratio, φ from fuel-lean to fuel-rich condition, we obtain Tad,max at φ=1, i.e. the stoichiometric condition. We have increasing Tad in the fuel-lean φ range and we have a decreasing Tad in the fuel-rich φ range. This analysis was done under fixed Tini and constant pressure conditions.  \n",
    "\n",
    "Under 3 different conditions while keeping other specified conditions fixed and constant, we observed how Tad and equilibrium composition of different dissociated gases vary in a more realistic case. We observed the change in equilibrium composition of CO2, CO, O2, H2, H2O and C2H6 in these 3 cases. Tad increases with increasing the pressure and Tini. However, for increasing pressure it always remains lower than Tad, max of the ideal case. As we increase the equivalence ratio, φ the graph peaks at φ=1 and then starts to decrease for φ>1.  In a highly ideal case where dissociation of gas is not concerned, we will always obtain a higher Tad, max than that of the a more realistic case under the same conditions. For increasing Tini and P, mole fraction of C2H6 increases because presence of more species of gases hinders the possibility of it reacting. Equilibrium composition of C2H6 increases and O2 decreases as the reaction changes from fuel-lean to fuel rich. We also see an increase in composition of CO and H2 as φ increases.\n",
    "\n",
    "The same way increasing P and Tini the combustion of CH4, presence of an inert gas reduces the rate at which CH4 combusts as well. We observe how EGR with CO2 as a dilution agent reduces the Tad as we increase the molar fraction of CO2 as a reactant. The resultant effect of the reduced Tad and combustibility of CH4 causes the equilibrium composition of pollutants like CO, NO an NO2 to reduce with increased percentage of the dilution agent. This happens because CO is a direct product of combustion of a hydrocarbon fuel like CH4 and NOx is thermally dependent.\n",
    "\n"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
